일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- mvc
- appendleft
- Java
- popleft
- 소수판별
- 소수찾기
- JPA
- 브루투포스
- pypy3
- 완전탐색
- 합 구하기
- 그리디 알고리즘
- spring
- 1일1솔
- c#
- C#강의
- 누적합
- DP
- 백준
- 프로그래머스
- LCM
- python3
- deque
- unity
- 우선순위큐
- Python
- 연관관계
- BFS
- 파이썬
- 인프런
Archives
- Today
- Total
jae_coding
(백준 알고리즘 문제풀이) 1655번 가운데를 말해요 본문
반응형
문제
문제 접근
- 우선순위를 가진 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를 모른다면 문제에 대한 접근을 엄청 어렵게 했을 것 같다. 확실히 코딩이든 어떤 공부를 하든 아는것이 힘이된다. 더욱 공부하며 성장할 수 있는 내가 되어야겠다.
반응형
'알고리즘 문제 > 백준' 카테고리의 다른 글
(백준 알고리즘 문제풀이) 3085번 사탕게임 (0) | 2022.07.12 |
---|---|
(백준 알고리즘 문제풀이) 2846번 오르막길 (0) | 2022.07.12 |
(백준 알고리즘 문제풀이) 1260번 BFS, DFS (0) | 2022.07.10 |
(백준 알고리즘 문제풀이) 1699번 제곱수의 합 (0) | 2022.07.07 |
(백준 알고리즘 문제풀이) 11054번 가장 긴 바이토닉 부분 수열 (0) | 2022.07.07 |
Comments