알고리즘 문제/백준
(백준 알고리즘 문제풀이) 1655번 가운데를 말해요
재코딩
2022. 7. 10. 22:41
반응형
문제
문제 접근
- 우선순위를 가진 Queue인 우선순위 큐를 이용하면 될 것이다.
- N개 만큼은 정수형을 받았을 때, 순위에서 가운데 숫자를 말하면 되는 것이다.
- 만약 N개중에 짝수번째라면 우선순위 큐 1에 푸쉬를 해준다. 하지만 홀수번째라면 또 다른 우선순위 큐 2에 받아온 값에 -1을 곱한 값을 푸쉬해준다.
- 우선순위 큐 1의 가장 큰 값의 절대값이 우선순위 큐 2의 가장 작은 값보다 작게된다면 중간수가 변하는 것이므로 두개의 부호를 바꾸어주어 서로 스왑해준다.
- 출력: t에서 가장 작은 값을 부호를 바꾸어 출력하면된다.
코드
import sys, heapq
# 1~2: 1, 3~4: 2, 5~6: 3 ......
N = int(sys.stdin.readline())
q = list()
t = list()
for i in range(N):
temp = int(sys.stdin.readline())
if i % 2 == 1:
heapq.heappush(q, temp)
else:
heapq.heappush(t, -temp)
if q and -t[0] > q[0]:
heapq.heappush(q, -heapq.heappop(t))
heapq.heappush(t, -heapq.heappop(q))
print(-t[0])
느낀점
Queue를 모른다면 문제에 대한 접근을 엄청 어렵게 했을 것 같다. 확실히 코딩이든 어떤 공부를 하든 아는것이 힘이된다. 더욱 공부하며 성장할 수 있는 내가 되어야겠다.
반응형