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

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

20055๋ฒˆ: ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡

๊ธธ์ด๊ฐ€ N์ธ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ๊ฐ€ ์žˆ๊ณ , ๊ธธ์ด๊ฐ€ 2N์ธ ๋ฒจํŠธ๊ฐ€ ์ด ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ๋ฅผ ์œ„์•„๋ž˜๋กœ ๊ฐ์‹ธ๋ฉฐ ๋Œ๊ณ  ์žˆ๋‹ค. ๋ฒจํŠธ๋Š” ๊ธธ์ด 1 ๊ฐ„๊ฒฉ์œผ๋กœ 2N๊ฐœ์˜ ์นธ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๊ฐ ์นธ์—๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด 1๋ถ€

www.acmicpc.net

 

๋ฌธ์ œ ํ’€์ด

 ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๋ฌธ์ œ ์ค‘์—์„œ ์‰ฌ์šด ํŽธ์— ์†ํ•˜๋ฉฐ, ๋ฌธ์ œ์— ์š”๊ตฌํ•˜๋Š” ์‚ฌํ•ญ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋˜๋Š” ๋ฌธ์ œ์ด๋‹ค. ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ๊ฐ€ ํšŒ์ „ํ•˜๋Š” ๊ฒƒ์€ `deque.rotate()`๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

  1. ๋ฒจํŠธ๊ฐ€ ํ•œ ์นธ ํšŒ์ „ํ•œ๋‹ค.
  2. ๊ฐ€์žฅ ๋จผ์ € ๋ฒจํŠธ์— ์˜ฌ๋ผ๊ฐ„ ๋กœ๋ด‡๋ถ€ํ„ฐ, ๋ฒจํŠธ๊ฐ€ ํšŒ์ „ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด๋™ํ•œ๋‹ค. ๋งŒ์•ฝ ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๊ฐ€๋งŒํžˆ ์žˆ๋Š”๋‹ค.
    1. ๋กœ๋ด‡์ด ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋™ํ•˜๋ ค๋Š” ์นธ์— ๋กœ๋ด‡์ด ์—†์œผ๋ฉฐ, ๊ทธ ์นธ์˜ ๋‚ด๊ตฌ๋„๊ฐ€ 1 ์ด์ƒ ๋‚จ์•„ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  3. ์˜ฌ๋ผ๊ฐ€๋Š” ์œ„์น˜์— ๋กœ๋ด‡์ด ์—†๋‹ค๋ฉด ๋กœ๋ด‡์„ ํ•˜๋‚˜ ์˜ฌ๋ฆฐ๋‹ค.
  4. ๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ์นธ์˜ ๊ฐœ์ˆ˜๊ฐ€ K๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด ๊ณผ์ •์„ ์ข…๋ฃŒํ•˜๊ณ , ์•„๋‹ˆ๋ฉด 1๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค.

 ๋ฌธ์ œ์—์„œ ์ œ์‹œ๋œ ์œ„์˜ ๊ณผ์ •์„ ์ˆœ์„œ๋Œ€๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ์–ด๋ ค์šด ์‚ฌํ•ญ์€ ์—†์—ˆ์ง€๋งŒ `bool` ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์†๋„๊ฐ€ ๋Š๋ฆฐ์ง€ 57% ํ†ต๊ณก์˜ ๋ฒฝ์ด ์žˆ์—ˆ๋‹ค. (57%์—์„œ ๊ณ„์† ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.)

 

์ฝ”๋“œ

from sys import stdin
from collections import deque


if __name__ == '__main__':
    N, K = map(int, stdin.readline().split())
    A = deque(map(int, stdin.readline().split()))
    robot = deque([0] * N)

    stage = 0

    # 4. ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ์˜ ๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ๊ฒƒ์ด K๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ๊นŒ์ง€ ๋ฐ˜๋ณต
    while A.count(0) < K:
        # 1. ๋ฒจํŠธ์™€ ๋กœ๋ด‡์„ ํ•œ ์นธ ํšŒ์ „
        # (clockwise)
        A.rotate(1)
        robot.rotate(1)

        # ๋‚ด๋ ค๊ฐˆ ์œ„์น˜์— ๋กœ๋ด‡์„ ๋‚ด๋ฆผ
        robot[-1] = 0

        # 2. ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฒฝ์šฐ ๋กœ๋ด‡์„ ์›€์ง์ž„
        for idx in range(N - 2, -1, -1):
            # ๋กœ๋ด‡์ด ์—†์œผ๋ฉด ํŒจ์Šค
            if robot[idx] == 0:
                continue
            # ๋‹ค์Œ์นธ์— ๋กœ๋ด‡์ด ์—†๊ณ  ๋‚ด๊ตฌ๋„๊ฐ€ ์žˆ๋‹ค๋ฉด, ์˜ฎ๊น€
            if robot[idx + 1] == 0 and A[idx + 1]:
                A[idx + 1] -= 1
                robot[idx + 1] = 1
                robot[idx] = 0

        # ์ด๋™ ํ›„์—๋„ ๋‚ด๋ ค๊ฐˆ ๊ณณ์— ์žˆ๋‹ค๋ฉด ๋‚ด๋ฆผ
        robot[-1] = 0

        # 3. ์ฒซ ๋ฒˆ์งธ ์นธ์— ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค๋ฉด ์˜ฌ๋ฆฌ๊ธฐ.
        if A[0] and robot[0] == 0:
            A[0] -= 1
            robot[0] = 1

        stage += 1

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