https://www.acmicpc.net/problem/2346
โจ ๋ฌธ์
- 1๋ฒ๋ถํฐ N๋ฒ๊น์ง N๊ฐ์ ํ์ ์ด ์ํ์ผ๋ก ๋์ฌ ์๊ณ . i๋ฒ ํ์ ์ ์ค๋ฅธ์ชฝ์๋ i+1๋ฒ ํ์ ์ด ์๊ณ , ์ผ์ชฝ์๋ i-1๋ฒ ํ์ ์ด ์๋ค. ๋จ, 1๋ฒ ํ์ ์ ์ผ์ชฝ์ N๋ฒ ํ์ ์ด ์๊ณ , N๋ฒ ํ์ ์ ์ค๋ฅธ์ชฝ์ 1๋ฒ ํ์ ์ด ์๋ค. ๊ฐ ํ์ ์์๋ ์ข ์ด๊ฐ ํ๋ ๋ค์ด์๊ณ , ์ข ์ด์๋ -N๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , N๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์๊ฐ ํ๋ ์ ํ์๋ค. ์ด ํ์ ๋ค์ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ผ๋ก ํฐ๋จ๋ฆฐ๋ค.์๋ฅผ ๋ค์ด ๋ค์ฏ ๊ฐ์ ํ์ ์์ ์ฐจ๋ก๋ก 3, 2, 1, -3, -1์ด ์ ํ ์์๋ค๊ณ ํ์. ์ด ๊ฒฝ์ฐ 3์ด ์ ํ ์๋ 1๋ฒ ํ์ , -3์ด ์ ํ ์๋ 4๋ฒ ํ์ , -1์ด ์ ํ ์๋ 5๋ฒ ํ์ , 1์ด ์ ํ ์๋ 3๋ฒ ํ์ , 2๊ฐ ์ ํ ์๋ 2๋ฒ ํ์ ์ ์์๋๋ก ํฐ์ง๊ฒ ๋๋ค.
- ์ฐ์ , ์ ์ผ ์ฒ์์๋ 1๋ฒ ํ์ ์ ํฐ๋จ๋ฆฐ๋ค. ๋ค์์๋ ํ์ ์์ ์๋ ์ข ์ด๋ฅผ ๊บผ๋ด์ด ๊ทธ ์ข ์ด์ ์ ํ์๋ ๊ฐ๋งํผ ์ด๋ํ์ฌ ๋ค์ ํ์ ์ ํฐ๋จ๋ฆฐ๋ค. ์์๊ฐ ์ ํ ์์ ๊ฒฝ์ฐ์๋ ์ค๋ฅธ์ชฝ์ผ๋ก, ์์๊ฐ ์ ํ ์์ ๋๋ ์ผ์ชฝ์ผ๋ก ์ด๋ํ๋ค. ์ด๋ํ ๋์๋ ์ด๋ฏธ ํฐ์ง ํ์ ์ ๋นผ๊ณ ์ด๋ํ๋ค.
โจ ์ ๊ทผ ๋ฐฉ๋ฒ
- ๊ฒฐ๋ก ๋ถํฐ ์ด์ผ๊ธฐํ์๋ฉด ๊ฒฐ๊ตญ ์ด ๋ฌธ์ ๋ฅผ ํธ๋๋ฐ ์คํจํ๋ค ใ ใ ใ ๋ช์๊ฐ ๋์ ๊ณ ๋ฏผํ ๊ฒฐ๊ณผ ์ด๋์ ๋ ์ ๋ต์ ๊ทผ์ ํ์ง๋ง ๊ฒฐ๊ตญ ์คํจํด๋ฒ๋ฆฌ๊ณ ๋ค๋ฅธ ์ฌ๋์ ์ ๋ต์ ์ฐธ๊ณ ํ๋ค.
- ์ฒ์ ์ด ๋ฌธ์ ๋ฅผ ์ ํ์ ๋๋ ํ๋ฅผ ๋จผ์ ๋ ์ฌ๋ ธ๋ค. ๋ฆฌ์คํธ๋ฅผ ์ธ ์๋ ์๊ฒ ์ง๋ง, ์ด ๋ฌธ์ ์์๋ ์ง์์ ์ธ pop์ด ์ด๋ฃจ์ด์ง๊ณ ์ด๋ฅผ ํ์ด์ฌ์ list๋ก ๊ตฌํํ๋ค๋ฉด ์๊ฐ๋ณต์ก๋๊ฐ ์ฌ๋ผ๊ฐ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์๋ํ๋ฉด ํ์ด์ฌ์ list๋ array list๋ฅผ ์ฐ๊ธฐ์ ์์ ์์๊ฐ pop ๋๋ฉด ๋ค์ ์์๋ค์ index๋ฅผ ํ๋์ฉ ์์ผ๋ก ๋น๊ธฐ๊ฒ ๋๋ฉด์ ์๊ฐ ๋ณต์ก๋๊ฐ O(n)์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- ๊ทธ๋์ ํ๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ํ์์ง๋ง ๋ค๋ฅธ ๊ณ ๋ฏผ์ด ์๊ฒผ๋ค. ์ฐ๋ฆฌ๋ ํ์ ์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํด์ผํ๋๋ฐ, ํ์์๋ ์ธ๋ฑ์ค๋ฅผ ํตํ pop์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ!!! ๊ทธ๋์ ์๊ฐํ ๋์์ index์ ํด๋นํ๋ ๊ฐ์ ์ ์ฅํ ํ remove ํจ์๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด์๋ค. ํ์ง๋ง ์ด๋ ๋ง์ฝ ํ์ ์์ ์ค๋ณต๋ ๊ฐ์ด ์์ ๊ฒฝ์ฐ ๋ถ๊ฐ๋ฅํด์ง๋ค. ๋ฌธ์ ์๋ ์ค๋ณต์ ๋ถํํ๋ค๋ ๋ด์ฉ์ด ์์ผ๋ฏ๋ก ์ด ๋ฐฉ๋ฒ๋ ๋ถ๊ฐ๋ฅ์ด๋ค.
- ํ๋ฅผ ํฌ๊ธฐํ๊ณ ๋ฆฌ์คํธ๋ก ๊ตฌํ์ ์์ํ๋ค. ํ์ ์ ์ ํ ๊ฐ์ ๊ธฐ๋กํ๊ธฐ ์ํ ๋ฆฌ์คํธ์, ํ์ ์ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ๋กํ๊ธฐ ์ํ ๋ฆฌ์คํธ ์ด๋ ๊ฒ ๋ ๊ฐ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์๋ค. ์ถ๊ฐ๋ก remove_index, op(operation) ๋ฑ๊ณผ ๊ฐ์ ๋ณ์๋ฅผ ๋ง๋ค์ด์ ์ด๋ฐ์ ๋ฐ ๋ฐฉ๋ฒ์ ์๋ํด๋ดค์ง๋ง ์คํจ ใ ใ ใ ํใ ใ ใ
- ๊ฒฐ๊ตญ ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ๋ณด์๋๋ฐ deque์ rotate๊ธฐ๋ฅ์ ์ด์ฉํด์ ์์ฃผ ์ฝ๊ฒ ๊ตฌํ์ด ๊ฐ๋ฅํ ๋ฌธ์ ์๋ค...
- ๊ทธ๋ ๋ค๋ฉด deque์ rotate ํจ์๋ ์ด๋ค ๊ธฐ๋ฅ์ ํ ๊น?
โจ Deque์ rotate
- rotate๋ผ๋ ์ด๋ฆ์์ ์ ์ถ ๊ฐ๋ฅํ๋ฏ์ด rotateํจ์๋ ํ์ ์์๋ฅผ ์ง์ ํ ๊ฐ์๋งํผ ํ์ ์ํค๋ ๊ธฐ๋ฅ์ํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์์๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ๋๋ฆฌ๋ฉฐ ์ธ์๋ก ์์ ๊ฐ์ ์ฃผ๋ฉด ์ผ์ชฝ์ผ๋ก ๋๋ฆฌ๊ฒ ๋๋ค.
- ์๋ ์ฝ๋์ ์์๋ฅผ ๋ณด๋ฉด ์๋ [1,2,3,4,5] ์๋ ํ๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก 2๋ฒ ํ์ ํ์ฌ ๋ชจ๋ ์์๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ๋ ์นธ ์ด๋ํ๊ฒ ๋๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก [4,5,1,2,3,]์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ธ๋ค. ์ด๋ ๊ฒ ํ์ ๋ ํ๋ฅผ ๋ ๋ค์ -3๋งํผ ํ์ ์ํค๋ฉด ์ผ์ชฝ์ผ๋ก 3์นธ ์ด๋์ํค๋ ๊ฒ์ด๋ฏ๋ก [2,3,4,5,1]๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ด๊ฒ ๋๋ ๊ฒ์ด๋ค.
from collections import deque
# ๋ฑ ์์ฑ
my_deque = deque([1, 2, 3, 4, 5])
# ํ์ฌ ๋ฑ ์ํ ์ถ๋ ฅ
print("Original deque:", my_deque)
# ์ค๋ฅธ์ชฝ์ผ๋ก 2๋ฒ ํ์
my_deque.rotate(2)
print("After rotating 2 to the right:", my_deque)
#After rotating 2 to the right: deque([4, 5, 1, 2, 3])
# ์ผ์ชฝ์ผ๋ก 3๋ฒ ํ์
my_deque.rotate(-3)
print("After rotating 3 to the left:", my_deque)
#After rotating 3 to the left: deque([2, 3, 4, 5, 1])
โจ ์ฝ๋
- ์ด์ deque์ rotate ๊ธฐ๋ฅ์ ์ด์ฉํ๋ฉด ์์ฃผ ์ฝ๊ฒ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค
from collections import deque
N = int(input())
queue = deque(list(map(int, input().split())))
queue2 = deque([i for i in range(1,N+1)])
answer = []
while queue:
q = queue[0]
print(queue)
if q > 0:
queue.popleft()
queue.rotate(-q+1)
answer.append(queue2.popleft())
queue2.rotate(-q+1)
else:
queue.popleft()
queue.rotate(-q)
answer.append(queue2.popleft())
queue2.rotate(-q)
print(answer)
'์๊ณ ๋ฆฌ์ฆ ๐ฅ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 2493๋ฒ : ํ(G5) (0) | 2024.01.04 |
---|---|
๋ฐฑ์ค 1935๋ฒ: ํ์ ํ๊ธฐ์2(S3) (1) | 2023.12.29 |
๋ฐฑ์ค 1158๋ฒ : ์์ธํธ์ค ๋ฌธ์ (S4) (0) | 2023.12.29 |
๋ฐฑ์ค 10828๋ฒ : ์คํ(S4) (0) | 2023.12.25 |
๋ฐฑ์ค 2164๋ฒ: ์นด๋2(S4) (2) | 2023.12.25 |