ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

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

์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N(1≤N≤1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” ์ฐจ๋ก€๋กœ ๊ฐ ํ’์„  ์•ˆ์˜ ์ข…์ด์— ์ ํ˜€ ์žˆ๋Š” ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ํŽธ์˜์ƒ 0์€ ์ ํ˜€์žˆ์ง€ ์•Š๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ๊ฐ ํ’์„ ์— ๋‹ค์Œ ์ˆœ๋ฒˆ ํ’์„ ์œผ๋กœ ๊ฐ€๊ธฐ ์œ„ํ•œ ๊ฐ’๋“ค์ด ์ ํ˜€์žˆ๋‹ค. ํ•ด๋‹น ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์Œ์ˆ˜์ด๋ฉด ์ขŒ์ธก, ์–‘์ˆ˜์ด๋ฉด ์šฐ์ธก์œผ๋กœ ๋‹ค์Œ์— ํ„ฐํŠธ๋ฆด ํ’์„ ์„ ์„ ํƒํ•œ๋‹ค. ํ„ฐํŠธ๋ฆฐ ์ˆœ์„œ๋Œ€๋กœ ํ’์„ ์˜ ๋ฒˆํ˜ธ(Index)๋ฅผ ๊ธฐ๋กํ•œ ํ›„, ์ •๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด ์ ‘๊ทผํ•˜์˜€๋‹ค.

 

  • ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์„ ํ†ตํ•ด, ํ„ฐํŠธ๋ฆฌ๊ณ ์ž ํ•˜๋Š” ํ’์„ ์„ ๋ฐ”๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
  • ํ•˜์ง€๋งŒ, ์ž…๋ ฅ๋œ ํ’์„ ๋“ค ์ „์ฒด๋ฅผ left, right shift ํ•˜๋Š” ๋ฐฉ์‹์„ ํ†ตํ•ด ๋‹ต์„ ์ฐพ๊ณ ์ž ํ–ˆ๋‹ค.
    • Python์˜ ๊ฒฝ์šฐ, list๋Š” shift๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
      • ์ด๋Š” `pop(0)`์™€ `insert(index, value)`์™€ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋“ค์ด O(N)์˜ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    • ๋”ฐ๋ผ์„œ shift๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ, `deque`๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์•ผ ํ•œ๋‹ค.

 

์ฝ”๋“œ

from sys import stdin
from collections import deque

if __name__ == "__main__":
    N = int(stdin.readline())
    q = deque(enumerate(map(int, stdin.readline().split())))
    answer = []

    while True:
        idx, paper = q.popleft()
        answer.append(idx + 1)

        if not q:
            break

        if paper > 0:
            # rotate(-) == append(q.popleft())
            q.rotate(-(paper - 1))
        elif paper < 0:
            # rotate(+) == appendleft(q.pop())
            q.rotate(-paper)

    print(' '.join(map(str, answer)))

 

 

728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€