-
[Python] ๋ฐฑ์ค 1966 ํ๋ฆฐํฐ ํ (Deque)๐ป Algorithm/Python 2022. 7. 2. 13:53
๐ ๋ฌธ์
์ฌ๋ฌ๋ถ๋ ์๋ค์ํผ ์ฌ๋ฌ๋ถ์ ํ๋ฆฐํฐ ๊ธฐ๊ธฐ๋ ์ฌ๋ฌ๋ถ์ด ์ธ์ํ๊ณ ์ ํ๋ ๋ฌธ์๋ฅผ ์ธ์ ๋ช ๋ น์ ๋ฐ์ ‘์์๋๋ก’, ์ฆ ๋จผ์ ์์ฒญ๋ ๊ฒ์ ๋จผ์ ์ธ์ํ๋ค. ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์๊ฐ ์์ธ๋ค๋ฉด 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๋ฒ์งธ๋ก ์ธ์๋๊ฒ ๋๋ค.
์ ๋ ฅ
์ฒซ ์ค์ ํ ์คํธ์ผ์ด์ค์ ์๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ ํ ์คํธ์ผ์ด์ค๋ ๋ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
ํ ์คํธ์ผ์ด์ค์ ์ฒซ ๋ฒ์งธ ์ค์๋ ๋ฌธ์์ ๊ฐ์ N(1 ≤ N ≤ 100)๊ณผ, ๋ช ๋ฒ์งธ๋ก ์ธ์๋์๋์ง ๊ถ๊ธํ ๋ฌธ์๊ฐ ํ์ฌ Queue์์ ๋ช ๋ฒ์งธ์ ๋์ฌ ์๋์ง๋ฅผ ๋ํ๋ด๋ ์ ์ M(0 ≤ M < N)์ด ์ฃผ์ด์ง๋ค. ์ด๋ ๋งจ ์ผ์ชฝ์ 0๋ฒ์งธ๋ผ๊ณ ํ์. ๋ ๋ฒ์งธ ์ค์๋ N๊ฐ ๋ฌธ์์ ์ค์๋๊ฐ ์ฐจ๋ก๋๋ก ์ฃผ์ด์ง๋ค. ์ค์๋๋ 1 ์ด์ 9 ์ดํ์ ์ ์์ด๊ณ , ์ค์๋๊ฐ ๊ฐ์ ๋ฌธ์๊ฐ ์ฌ๋ฌ ๊ฐ ์์ ์๋ ์๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ๋ฌธ์๊ฐ ๋ช ๋ฒ์งธ๋ก ์ธ์๋๋์ง ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ
3
1 0
5
4 2
1 2 3 4
6 0
1 1 9 1 1 1๋ฒ์ญ์ด ์ฉ ๋งค๋๋ฝ์ง ์์์ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ๊ทธ๋ฆผ์ ๊ทธ๋ ค๋ณด์์ต๋๋ค. ์ฐ์ ์์ ํ์ ๋ฐ๋ฅด๋ฉด ๋นจ๊ฐ ์์ด ๋ช ๋ฒ์งธ๋ก ์ธ์๋๋์ง ๊ตฌํ๋ฉด ๋๋ ๋ฌธ์ ์ ๋๋ค.
์์ ์ถ๋ ฅ
1
2
5
๐ ํ์ด
์ฝ๋
import sys from collections import deque input = sys.stdin.readline tc = int(input()) for _ in range(tc): n, idx = map(int, input().split()) q = deque(map(int, input().split())) idxq = deque(range(0, n)) cnt = 0 while q: if q[0] == max(q): cnt += 1 q.popleft() if idxq.popleft() == idx: print(cnt) break else: q.rotate(-1) idxq.rotate(-1)
์๋ฃ๊ตฌ์กฐ ์ค๋ช
q.append(q.popleft()) ์ญํ ์ q.rotate(-1)๋ก ์ํํ ์ ์์ต๋๋ค. rotate(-1)์ ์ํ ํ๊ฐ ๋ฐ์๊ณ๋ฐฉํฅ์ผ๋ก 1์นธ ํ์ ํ๊ณ , rotate(1)์ ์๊ณ๋ฐฉํฅ์ผ๋ก 1์นธ ํ์ ํ๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ๋ฐ๋ผ์ rotate(-1)์ ํ๋ฉด ๋งจ ์์ ๊ฒ์ popํด์ ๋งจ ๋ค๋ก pushํ๋ ํํ๊ฐ ๋๋ ๊ฒ์ ๋๋ค.
๋ฌธ์ ์์ ์ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์ต๋๋ค. ๋ค๋ง ์ด๋ ๊ฒ ํ๋ค๋ฉด ๋ณธ๋ 0๋ฒ์งธ ์ธ๋ฑ์ค์ ๋ด๊ฒจ ์๋ ๊ฐ์ด ๋ฌด์์ด์๋์ง ์๊ฒ ๋ฉ๋๋ค. ๋ฌธ์ ๊ฐ ๋ฌป๋ ๊ฒ์ '์ด๊ธฐ ์ํ์ 0๋ฒ์งธ ์ธ๋ฑ์ค์ ๋ด๊ฒจ ์๋ ๊ฒ์ด ๋ช ๋ฒ์งธ๋ก pop๋๋์ง'์ด๋ฏ๋ก, rotate๋ ๋ ์ด๊ธฐ ์ํ์ ์ธ๋ฑ์ค ์ ๋ณด๋ฅผ ์์ผ๋ฉด ์ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ธ๋ฑ์ค ์ ๋ณด๋ฅผ ๋ด์ deque๋ฅผ ์๋ก ๋ง๋ค์์ต๋๋ค. idxq = deque(range(0, n))์ผ๋ก! q์ ์ธ๋ฑ์ค๊ฐ idxq์ ๊ฐ์ด ๋๋ ๊ฒ์ ๋๋ค. q๊ฐ rotate๋ ๋ idxq๋ rotate์ํด์ผ๋ก์จ ์ด๊ธฐ ์ํ์ ์ธ๋ฑ์ค์ ๊ฐ์ด ํจ๊ป ์ด๋ํ๋๋ก ํฉ๋๋ค.
๋์๋ฐฉ์ ์ค๋ช
ํ์ ๋งจ ์์ ์๋ ๊ฐ์ด ํ์ฌ ํ์์ ๊ฐ์ฅ ํด ๋ pop๋๋ฏ๋ก, q[0]๊ณผ max(q)๋ฅผ ๋น๊ตํฉ๋๋ค.
๊ฐ๋ค๋ฉด pop๊ฐฏ์๋ฅผ ๋ํ๋ด๋ cnt๋ฅผ 1 ์ฆ๊ฐ์ํค๊ณ popํฉ๋๋ค. ๋ฌผ๋ก idxq์์๋ ๊ฐ์ด popํ๊ณ , ์ด๋ ์ด pop๋ ๊ฐ์ด ์ฐ๋ฆฌ๊ฐ ์ฃผ์ํ๊ณ ์๋ ์ธ๋ฑ์ค์ ๊ฐ๋ค๋ฉด ์คํ์ ๋๋ด๋ฉฐ ๋ช๋ฒ์งธ๋ก pop๋๊ฑด์ง cnt๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
๋ค๋ฅด๋ฉด ํ๋ฅผ rotate(-1)์ํต๋๋ค.
์คํ ์์๋ ์๋์ ๊ฐ์ต๋๋ค.
> 1 6 0 1 1 9 1 1 1 [1, 1, 9, 1, 1, 1] [1, 9, 1, 1, 1, 1] [9, 1, 1, 1, 1, 1] [1, 1, 1, 1, 1] [1, 1, 1, 1] [1, 1, 1] [1, 1] break
> 1 4 2 1 2 3 4 [1, 2, 3, 4] [2, 3, 4, 1] [3, 4, 1, 2] [4, 1, 2, 3] [1, 2, 3] [2, 3, 1] [3, 1, 2] break
'๐ป Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 16165 ๊ฑธ๊ทธ๋ฃน ๋ง์คํฐ ์ค์์ด (Dictionary) (0) 2022.07.02 [Python] ๋ฐฑ์ค 2346 ํ์ ํฐ๋จ๋ฆฌ๊ธฐ (Deque) (0) 2022.07.02 [Python] LeetCode 20 Valid Parentheses (Stack) (0) 2022.07.02 [Python] LeetCode 121 Best Time to Buy and Sell Stock (DP) (0) 2022.07.02 [Python] ๋ฐฑ์ค - 2579 ๊ณ๋จ ์ค๋ฅด๊ธฐ (DP) (0) 2021.10.26