โ๋ฌธ์
https://www.acmicpc.net/problem/1966
๋ฉ๋ชจ๋ฆฌ: 34924 KB, ์๊ฐ: 68 ms
๋ฉ๋ชจ๋ฆฌ: 32412 KB, ์๊ฐ: 52 ms
๋ฉ๋ชจ๋ฆฌ: 32412 KB, ์๊ฐ: 48 ms
์๋ฃ ๊ตฌ์กฐ, ๊ตฌํ, ํ, ์๋ฎฌ๋ ์ด์
์ฌ๋ฌ๋ถ๋ ์๋ค์ํผ ์ฌ๋ฌ๋ถ์ ํ๋ฆฐํฐ ๊ธฐ๊ธฐ๋ ์ฌ๋ฌ๋ถ์ด ์ธ์ํ๊ณ ์ ํ๋ ๋ฌธ์๋ฅผ ์ธ์ ๋ช ๋ น์ ๋ฐ์ ‘์์๋๋ก’, ์ฆ ๋จผ์ ์์ฒญ๋ ๊ฒ์ ๋จผ์ ์ธ์ํ๋ค. ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์๊ฐ ์์ธ๋ค๋ฉด Queue ์๋ฃ๊ตฌ์กฐ์ ์์ฌ์ FIFO - First In First Out - ์ ๋ฐ๋ผ ์ธ์๊ฐ ๋๊ฒ ๋๋ค. ํ์ง๋ง ์๊ทผ์ด๋ ์๋ก์ด ํ๋ฆฐํฐ๊ธฐ ๋ด๋ถ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ์๋๋ฐ, ์ด ํ๋ฆฐํฐ๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ธ์๋ฅผ ํ๊ฒ ๋๋ค.
- ํ์ฌ Queue์ ๊ฐ์ฅ ์์ ์๋ ๋ฌธ์์ ‘์ค์๋’๋ฅผ ํ์ธํ๋ค.
- ๋๋จธ์ง ๋ฌธ์๋ค ์ค ํ์ฌ ๋ฌธ์๋ณด๋ค ์ค์๋๊ฐ ๋์ ๋ฌธ์๊ฐ ํ๋๋ผ๋ ์๋ค๋ฉด, ์ด ๋ฌธ์๋ฅผ ์ธ์ํ์ง ์๊ณ Queue์ ๊ฐ์ฅ ๋ค์ ์ฌ๋ฐฐ์น ํ๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ๋ฐ๋ก ์ธ์๋ฅผ ํ๋ค.
์๋ฅผ ๋ค์ด Queue์ 4๊ฐ์ ๋ฌธ์(A B C D)๊ฐ ์๊ณ , ์ค์๋๊ฐ 2 1 4 3 ๋ผ๋ฉด C๋ฅผ ์ธ์ํ๊ณ , ๋ค์์ผ๋ก D๋ฅผ ์ธ์ํ๊ณ A, B๋ฅผ ์ธ์ํ๊ฒ ๋๋ค.
์ฌ๋ฌ๋ถ์ด ํ ์ผ์, ํ์ฌ Queue์ ์๋ ๋ฌธ์์ ์์ ์ค์๋๊ฐ ์ฃผ์ด์ก์ ๋, ์ด๋ค ํ ๋ฌธ์๊ฐ ๋ช ๋ฒ์งธ๋ก ์ธ์๋๋์ง ์์๋ด๋ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด ์์ ์์์ C๋ฌธ์๋ 1๋ฒ์งธ๋ก, A๋ฌธ์๋ 3๋ฒ์งธ๋ก ์ธ์๋๊ฒ ๋๋ค.
โ๐ปํ์ด
๋จผ์ ํ์ฌ ํ์์ ๊ฐ์ฅ ํฐ ์ค์๋ ๊ฐ์ ๊ตฌํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ฅผ ๋๋ฌ๋ณด๋ฉฐ ์ค์๋๊ฐ ๋ฎ๋ค๋ฉด ํ์์ popํ๋ฉด ๋ค๋ก ๋ค์ ๋ฃ๋๋ค. ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค ํ์ฌ ํ์ ๊ฐ์ฅ ํฐ ์ค์๋ ๊ฐ๊ณผ ๊ฐ์ ๋ฌธ์๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ์ฐพ๊ณ ์๋ ์ถ๋ ฅ๋ฌผ์ธ์ง ํ์ธํ๋ค. ์๋๋ผ๋ฉด ๊ทธ๋๋ก pop์ ํ๊ณ cnt๋ฅผ 1 ์ฆ๊ฐํ์ฌ ๋ช ๋ฒ์งธ์ธ์ง ๊ณ์ฐํ๋ค.
์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค ๊ฐ์ฅ ํฐ ์ค์๋ ๊ฐ์ผ ๋ ์ฐพ๊ณ ์๋ ์ถ๋ ฅ๋ฌผ์ ์ฐพ์๋ค๋ฉด ๊ทธ๋๋ก ์ถ๋ ฅ ์์๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
๐ป์ฝ๋
ํ๋ฅผ ์ฌ์ฉํ ์ฝ๋
import sys
from collections import deque
input = sys.stdin.readline
T = int(input())
for t in range(T):
N, M = map(int, input().split())
D = list(zip(list(map(int, input().split())), range(N)))
q = deque(D)
cnt = 1
while q:
mx = max(q)[0]
d = q.popleft()
if d[0] < mx:
q.append(d)
elif d[0] == mx:
if d[1] == M:
print(cnt)
break
else:
cnt += 1
๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ ์ฝ๋(zip์ผ๋ก tuple ์์ฑ ํ list๋ก ๋ณํ)
import sys
input = sys.stdin.readline
T = int(input())
for t in range(T):
N, M = map(int, input().split())
D = list(zip(list(map(int, input().split())), range(N)))
cnt = 1
while D:
mx = max(D)[0]
d = D.pop(0)
if d[0] < mx:
D.append(d)
elif d[0] == mx:
if d[1] == M:
print(cnt)
break
else:
cnt += 1
๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ ์ฝ๋(List Comprehension ์ฌ์ฉ)
import sys
input = sys.stdin.readline
T = int(input())
for t in range(T):
N, M = map(int, input().split())
D = [(x, y) for x, y in zip(list(map(int, input().split())), range(N))]
cnt = 1
while D:
mx = max(D)[0]
d = D.pop(0)
if d[0] < mx:
D.append(d)
elif d[0] == mx:
if d[1] == M:
print(cnt)
break
else:
cnt += 1
๐ํ๊ธฐ
๋ฆฌ์คํธ์์ pop(0)์ ํ๋ฉด O(N)์ ์๊ฐ ๋ณต์ก๋๊ฐ ๊ฑธ๋ฆฌ๊ณ , deque์ผ๋ก popํ๋ฉด O(1)์ ์๊ฐ ๋ณต์ก๋๋ก deque์ด list๋ณด๋ค ๋น ๋ฅด๋ค. ๊ทธ๋์ ๋๋ ์ฒ์์ deque์ ์ด์ฉํด์ ํ์๋ค. ๊ทธ๋ฌ๋ max ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์์ ์๊ฐ ์ฐจ์ด๊ฐ ๋ฐ์ํ ๊ฒ ๊ฐ๋ค. ๋ฆฌ์คํธ์์ max๋ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์์ ๋์ํ๋ฏ๋ก CPU ์บ์ ํ์ฉ์ด ์ฉ์ดํ๋ค๊ณ ํ๋ค. ๋ฐ๋ฉด์ deque์ ๋ ธ๋ ๊ธฐ๋ฐ ์๋ฃ๊ตฌ์กฐ๋ก ์ํํ๋ ๊ณผ์ ์์ ์ถ๊ฐ์ ์ธ ํฌ์ธํฐ ์ฐธ์กฐ๊ฐ ๋ฐ์ํ์ฌ ์คํ๋ ค ๋ ๋๋ฆฐ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ๊ฒ ๊ฐ๋ค.heapq๋ ๊ณ ๋ คํ๊ธด ํ๋๋ฐ ์ด๋ฌ๋ฉด popํ ๋ ์์๊ฐ ์ํ๋๋๋ก ๋์ค์ง ์์ ์๋ํ์ง ์์๋ค.
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1158. ์์ธํธ์ค ๋ฌธ์ /Python - Silver4 (0) | 2025.04.01 |
---|---|
[๋ฐฑ์ค] 1068. ํธ๋ฆฌ/Python - Gold5 (0) | 2025.03.19 |
[๋ฐฑ์ค] 2800. ๊ดํธ ์ ๊ฑฐ/Python - Gold4 (0) | 2025.03.18 |
[๋ฐฑ์ค]14940. ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ/Python - Silver1 (0) | 2025.03.10 |
[๋ฐฑ์ค] 17298.์คํฐ์/Python - Gold4 (0) | 2025.03.07 |