구현(6)
-
[BOJ_Python] 2108.통계학
문제https://www.acmicpc.net/problem/2108 사용 알고리즘수학, 구 풀이고려사항1. 최빈값의 경우 여러 개 존재 시 두 번째로 작은 값 출력 후기1. 이 문제의 keypoint는 최빈값을 관리하는 것이다.2. 나머지 풀이는 간단하다.산술 평균은 모두 합친 값을 N으로 나누면 구할 수 있고,중앙값의 경우 받은 숫자 리스트를 정렬 후 N // 2 위치의 값은 구하면 된다.범위의 경우는 이미 정렬된 리스트를 사용하여 가장 큰 수에서 작은 수를 빼서 구하면 된다. 3. 최빈값의 경우 최빈값이 하나라고 주어진다면 매번 갱신하며 구하면 되지만,빈도가 동일한 값들이 존재할 수 있기 때문에 따로 관리하여야 한다.때문에 숫자와 횟수를 관리하는 dict를 만들어 관리하였고숫자를 입력받을 때 횟수를..
2024.11.18 -
[BOJ_Python] 13414. 수강신청
문제https://www.acmicpc.net/problem/13414 사용 알고리즘구현 풀이고려사항1. 이미 수강신청 대기에 있는 학생인지 후기1. 처음에는 리스트를 만들어 remove와 append로 관리하였다.현재 수강신청을 누른 학생이 이미 이전에 누른 이력이 있다면 리스트에서 제거 후다시 맨 뒤에 넣어주는 방식을 선택했다.2. 하지만 이 방식은 시간초과가 발생하였다.- 학생이 있는지 확인하는 작업: 최악의 경우 O(N)- 학생을 제거하는 작업: 최악의 경우 O(N)- 학생을 추가하는 작업: O(1)-> 따라서 전체 시간 복잡도는 O(N**2) 3. 때문에 딕셔너리를 활용한 방식으로 변경하였다.딕셔너리를 들어온 순서로 갱신해주고value를 기준으로 정렬 후 K개를 뽑아주는 방식을 선택하였다.이때,..
2024.11.13 -
[BOJ_Python] 20057. 마법사 상어와 토네이도
문제https://www.acmicpc.net/problem/20057 사용 알고리즘구현, 시뮬레이션 풀이고려사항1. 반시계 방향으로 이동2.방향전환 시 날라가는 모래 percentage 변화3. 다른 칸으로 이동한 모래양, 밖으로 버려지는 모래양, 알파 값으로 이동할 모래 양 후기1. 토네이도 방향전환은 기준(N // 2, N // 2)부터 시작한다.방향을 제공하며 step을 확인하며 방향 변화 여부를 확인하고, flag를 확인하며 step의 수를 늘린다.우선 가야하는 step은 방향전환 2번마다 1씩 증가한다.때문에 Flag를 두어 방향 전환 시마다 토글 형식으로 변경하고 확인하였다.이전에 달팽이 문제를 풀어보아 동일한 방식으로 접근하였다.하지만 달팽이에 더 좋은 풀이가 있었는데 그 방식은 사용하지 ..
2024.11.10 -
[BOJ_Python]31797. 아~파트 아파트
문제https://www.acmicpc.net/problem/31797 사용 알고리즘구현, 시뮬레이션 풀이후기1. 큰 어려움 없는 문제였다. 다만, 놓치기 쉬운 부분을 다시 깨닫게 해주는 문제이다.처음에는 당연히 1 ~ 2N 사이의 숫자들로만 층이 구성된다고 생각하고 구현하였다.하지만 계속 오답이였고, 이는 그런 조건이 없다는 것을 깨닫고 너무 당연하게 제한을 두었다는 걸 알게되었다.처음에는 2N 크기의 리스트를 만들어서 풀었지만,문제를 깨닫고 빈 리스트에 append 후, 층을 기준으로 정렬하는 방법을 사용했다. 2. 이후 술을 마실 사람을 찾는 방법은 두가지로 구현하였다.2 - 1. 처음 떠오른 방식은 list형식의 인덱스로 접근하는 것이고, 시간효율성은 높지만 직관성이 조금 떨어진다.2 - 2. 다..
2024.10.26 -
[BOJ_Python]1913. 달팽이
문제https://www.acmicpc.net/problem/1913 사용 알고리즘구현 풀이고려사항1. 방향 변경 타이밍 확인2. 방향 변경 후기1. 내가 처음 푼 풀이는 조건이 너무 까다로워 다른 풀이를 찾던 중 더 깔끔한 조건의 풀이를 발견했다. 2. 우선, 나의 풀이는 안쪽 가운데 1부터 시작하여 시계방향으로 이동한다.방향을 제공하며 step을 확인하며 방향 변화 여부를 확인하고, flag를 확인하며 step의 수를 늘린다.우선 가야하는 step은 방향전환 2번마다 1씩 증가한다.때문에 Flag를 두어 방향 전환 시마다 토글 형식으로 변경하고 확인하였다.3. 마지막 출력 시 하나하나 for문을 돌며 해당 숫자가 target이 맞는 지 확인하며 출력하는 것보다배열을 채울 때 확인해서 저장해두고 배열 ..
2024.10.17 -
[BOJ]17144. 미세먼지 안녕!
문제https://www.acmicpc.net/problem/17144 사용 알고리즘구현, 시뮬레이션 풀이고려사항1. 먼지 확산 - 확산하는 곳이 공기청정기인지, 범위를 넘어가는 곳이 아닌지2. 공기 청정 - 방향전환, 먼지 이동 시 갱신 된 값과 이전 값 구분 후기1. 이 문제에서 어려운 점은 공기 청정 값 갱신이였다.아래 코드는 새로운 배열을 생성한 후 값을 옮기는 방식을 채택했다.하지만 공기 청정하는 라인의 값은 갱신되지만, 그 외의 원래 가지고 있어야하는 값이 0으로 나와 사용할 수 없었다.이러한 방식을 사용하려면 새로운 배열을 0이 아닌 원래 배열에서 deepcopy하여 사용해야 한다.# 잘못된 공기청정 로직def refresh(room): after_room = [[0] * C for _..
2024.08.28