-
[Python] ๋ฐฑ์ค 2346 ํ์ ํฐ๋จ๋ฆฌ๊ธฐ (Deque)๐ป Algorithm/Python 2022. 7. 2. 15:07
๐ ๋ฌธ์
1๋ฒ๋ถํฐ N๋ฒ๊น์ง N๊ฐ์ ํ์ ์ด ์ํ์ผ๋ก ๋์ฌ ์๊ณ . i๋ฒ ํ์ ์ ์ค๋ฅธ์ชฝ์๋ i+1๋ฒ ํ์ ์ด ์๊ณ , ์ผ์ชฝ์๋ i-1๋ฒ ํ์ ์ด ์๋ค. ๋จ, 1๋ฒ ํ์ ์ ์ผ์ชฝ์ N๋ฒ ํ์ ์ด ์๊ณ , N๋ฒ ํ์ ์ ์ค๋ฅธ์ชฝ์ 1๋ฒ ํ์ ์ด ์๋ค. ๊ฐ ํ์ ์์๋ ์ข ์ด๊ฐ ํ๋ ๋ค์ด์๊ณ , ์ข ์ด์๋ -N๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , N๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์๊ฐ ํ๋ ์ ํ์๋ค. ์ด ํ์ ๋ค์ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ผ๋ก ํฐ๋จ๋ฆฐ๋ค.
์ฐ์ , ์ ์ผ ์ฒ์์๋ 1๋ฒ ํ์ ์ ํฐ๋จ๋ฆฐ๋ค. ๋ค์์๋ ํ์ ์์ ์๋ ์ข ์ด๋ฅผ ๊บผ๋ด์ด ๊ทธ ์ข ์ด์ ์ ํ์๋ ๊ฐ๋งํผ ์ด๋ํ์ฌ ๋ค์ ํ์ ์ ํฐ๋จ๋ฆฐ๋ค. ์์๊ฐ ์ ํ ์์ ๊ฒฝ์ฐ์๋ ์ค๋ฅธ์ชฝ์ผ๋ก, ์์๊ฐ ์ ํ ์์ ๋๋ ์ผ์ชฝ์ผ๋ก ์ด๋ํ๋ค. ์ด๋ํ ๋์๋ ์ด๋ฏธ ํฐ์ง ํ์ ์ ๋นผ๊ณ ์ด๋ํ๋ค.
์๋ฅผ ๋ค์ด ๋ค์ฏ ๊ฐ์ ํ์ ์์ ์ฐจ๋ก๋ก 3, 2, 1, -3, -1์ด ์ ํ ์์๋ค๊ณ ํ์. ์ด ๊ฒฝ์ฐ 3์ด ์ ํ ์๋ 1๋ฒ ํ์ , -3์ด ์ ํ ์๋ 4๋ฒ ํ์ , -1์ด ์ ํ ์๋ 5๋ฒ ํ์ , 1์ด ์ ํ ์๋ 3๋ฒ ํ์ , 2๊ฐ ์ ํ ์๋ 2๋ฒ ํ์ ์ ์์๋๋ก ํฐ์ง๊ฒ ๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ N(1 ≤ N ≤ 1,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ ์ฐจ๋ก๋ก ๊ฐ ํ์ ์์ ์ข ์ด์ ์ ํ ์๋ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ข ์ด์ 0์ ์ ํ์์ง ์๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ํฐ์ง ํ์ ์ ๋ฒํธ๋ฅผ ์ฐจ๋ก๋ก ๋์ดํ๋ค.
์์ ์ ๋ ฅ 1
5
3 2 1 -3 -1์์ ์ถ๋ ฅ 1
1 4 5 3 2
๐ ํ์ด
import sys from collections import deque input = sys.stdin.readline n = int(input()) q = deque(enumerate(map(int, input().split()))) ans = [] while q: idx, paper = q.popleft() ans.append(idx + 1) if paper > 0: q.rotate(-(paper - 1)) elif paper < 0: q.rotate(-paper) print(' '.join(map(str, ans)))
enumerate
ํฐ์ง ํ์ ์ '๋ฒํธ(์ธ๋ฑ์ค+1)'๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ฏ๋ก pop์ ํ๋๋ผ๋ ์ด๊ธฐ ์ธ๋ฑ์ค ์ ๋ณด๋ ๋๊น์ง ์ ์ง๋์ด์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด enumerate๊ฐ ์ฌ์ฉํ์ต๋๋ค. enumerate ์ฌ์ฉ ์ ๊ณผ ํ์ ๋ฑ ์ํ๋ฅผ ๋น๊ตํด๋ณด๊ฒ ์ต๋๋ค.
- enumerate ์ฌ์ฉ ์
deque([3, 2, 1, -3, -1]) - enumerate ์ฌ์ฉ ํ
deque([(0, 3), (1, 2), (2, 1), (3, -3), (4, -1)])
๋ฑ์ ์ธ๋ฑ์ค์ ์ข ์ด ๊ฐ์ด ํํ๋ก ๋ฌถ์ฌ์ ํ๋์ ์์๋ก ์ ์ฅ๋ฉ๋๋ค.
๋ฐ๋ผ์ idx, paper = q.popleft()๋ฅผ ํ๋ฉด idx์๋ 0์ด, paper์๋ 3์ด ์ ์ฅ๋ฉ๋๋ค.deque.rotate()
rotate(-1)์ ์ํ ํ๋ฅผ ๋ฐ์๊ณ๋ฐฉํฅ์ผ๋ก 1์นธ ํ์ ์ํค๊ณ , rotate(1)์ ์๊ณ๋ฐฉํฅ์ผ๋ก 1์นธ ํ์ ์ํจ๋ค๊ณ ์๊ฐํ๋ฉด ์ฝ์ต๋๋ค.
ํ์ฌ ๋ฌธ์ ๋ ์ํ์ผ๋ก ๋์ฌ ์๋ ํ์ ์ ๋์์ผ๋ก ํ๊ณ , ์ผ์ชฝ, ์ค๋ฅธ์ชฝ ์๋ฐฉํฅ์ผ๋ก ์ด๋์ด ๊ฐ๋ฅํด์ผ ํ๋ฏ๋ก deque.rotate()๋ฅผ ์ฌ์ฉํ๊ธฐ ๋ฑ ์ข์ ๋ฌธ์ ์ ๋๋ค.
์ด์ paper๊ฐ ์์์ธ์ง ์์์ธ์ง์ ๋ฐ๋ผ ํ์ ๋ฐฉํฅ๊ณผ ์นธ์๋ง ์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค. ์ดํด๋ฅผ ๋๊ธฐ ์ํด ๊ทธ๋ฆผ์ ๊ทธ๋ ค๋ณด์์ต๋๋ค.
- ๋นจ๊ฐ: ํ์ฌ ๋ฑ์ ๊ฐ์ฅ ์์ชฝ์ ์์นํ ์์(popํ ๋์)
- ํ๋: ์ด๋ํด์ผ ํ ๊ณณ
paper > 0: ๋ฑ์ ์ผ์ชฝ์ผ๋ก ํ์ ์์ผ ํด๋น ํ์ ์ด pop ๋์์ด ๋๋๋ก ๋ง๋ญ๋๋ค.
→ ๊ทธ๋ฐ๋ฐ ์ด๋ฏธ ํ์ฌ ํ์ ์ popํ๊ธฐ ๋๋ฌธ์ ์ผ์ชฝ์ผ๋ก 1์นธ์ฉ ํ์ ๋ ์ํ์ ๋๋ค. ๋ฐ๋ผ์ ํ์ ํ ๋ paper-1์นธ๋งํผ๋ง ํ์ ์์ผ์ผ ํฉ๋๋ค.
paper < 0: ๋ฑ์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ ์์ผ ํด๋น ํ์ ์ด pop ๋์์ด ๋๋๋ก ๋ง๋ญ๋๋ค.
→ ๋ง์ฐฌ๊ฐ์ง๋ก ํ์ฌ ํ์ ์ด pop๋์ด์ ์ผ์ชฝ์ผ๋ก 1์นธ์ฉ ํ์ ๋ ์ํ์ด์ง๋ง, ์ฐ๋ฆฌ๋ ์ค๋ฅธ์ชฝ์ผ๋ก ํ์ ํ ๊ฒ์ด๋ฏ๋ก ํ์ ์นธ์์๋ ์ํฅ์ด ์์ต๋๋ค.popํ ๋๋ง๋ค idx+1์ ์ ๋ต๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
'๐ป Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ฐฑ์ค 2841 ์ธ๊ณ์ธ์ ๊ธฐํ ์ฐ์ฃผ (Stack) (0) 2022.07.02 [Python] ๋ฐฑ์ค 16165 ๊ฑธ๊ทธ๋ฃน ๋ง์คํฐ ์ค์์ด (Dictionary) (0) 2022.07.02 [Python] ๋ฐฑ์ค 1966 ํ๋ฆฐํฐ ํ (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 - enumerate ์ฌ์ฉ ์