์•Œ๊ณ ๋ฆฌ์ฆ˜ ๐Ÿ”ฅ/๋ฐฑ์ค€

๋ฐฑ์ค€ 2346๋ฒˆ : ํ’์„  ํ„ฐ๋œจ๋ฆฌ๊ธฐ(S3)

23.8 2023. 12. 29. 19:27
๋ฐ˜์‘ํ˜•

 

https://www.acmicpc.net/problem/2346

 

2346๋ฒˆ: ํ’์„  ํ„ฐ๋œจ๋ฆฌ๊ธฐ

1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ N๊ฐœ์˜ ํ’์„ ์ด ์›ํ˜•์œผ๋กœ ๋†“์—ฌ ์žˆ๊ณ . i๋ฒˆ ํ’์„ ์˜ ์˜ค๋ฅธ์ชฝ์—๋Š” i+1๋ฒˆ ํ’์„ ์ด ์žˆ๊ณ , ์™ผ์ชฝ์—๋Š” i-1๋ฒˆ ํ’์„ ์ด ์žˆ๋‹ค. ๋‹จ, 1๋ฒˆ ํ’์„ ์˜ ์™ผ์ชฝ์— N๋ฒˆ ํ’์„ ์ด ์žˆ๊ณ , N๋ฒˆ ํ’์„ ์˜ ์˜ค๋ฅธ์ชฝ์— 1๋ฒˆ ํ’์„ 

www.acmicpc.net

 

โœจ ๋ฌธ์ œ

  • 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)
728x90
๋ฐ˜์‘ํ˜•