๐Ÿ’ก Coding Test/Baekjoon Online Judge

[๋ฐฑ์ค€ ์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ ํ…Œ์ŠคํŠธ ๊ธฐ์ถœ ๋ฌธ์ œ] 20055๋ฒˆ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡(Python/ํŒŒ์ด์ฌ)

soozkim 2023. 6. 6. 21:36

์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ ํ…Œ์ŠคํŠธ ๊ธฐ์ถœ ๋ฌธ์ œ - 20055๋ฒˆ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡

 

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

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

www.acmicpc.net

๋ฌธ์ œ

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

๋ฒจํŠธ๊ฐ€ ํ•œ ์นธ ํšŒ์ „ํ•˜๋ฉด 1๋ฒˆ๋ถ€ํ„ฐ 2N-1๋ฒˆ๊นŒ์ง€์˜ ์นธ์€ ๋‹ค์Œ ๋ฒˆํ˜ธ์˜ ์นธ์ด ์žˆ๋Š” ์œ„์น˜๋กœ ์ด๋™ํ•˜๊ณ , 2N๋ฒˆ ์นธ์€ 1๋ฒˆ ์นธ์˜ ์œ„์น˜๋กœ ์ด๋™ํ•œ๋‹ค. i๋ฒˆ ์นธ์˜ ๋‚ด๊ตฌ๋„๋Š” Ai์ด๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ์—์„œ 1๋ฒˆ ์นธ์ด ์žˆ๋Š” ์œ„์น˜๋ฅผ "์˜ฌ๋ฆฌ๋Š” ์œ„์น˜", N๋ฒˆ ์นธ์ด ์žˆ๋Š” ์œ„์น˜๋ฅผ "๋‚ด๋ฆฌ๋Š” ์œ„์น˜"๋ผ๊ณ  ํ•œ๋‹ค.

 

์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ์— ๋ฐ•์Šค ๋ชจ์–‘ ๋กœ๋ด‡์„ ํ•˜๋‚˜์”ฉ ์˜ฌ๋ฆฌ๋ ค๊ณ  ํ•œ๋‹ค. ๋กœ๋ด‡์€ ์˜ฌ๋ฆฌ๋Š” ์œ„์น˜์—๋งŒ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค. ์–ธ์ œ๋“ ์ง€ ๋กœ๋ด‡์ด ๋‚ด๋ฆฌ๋Š” ์œ„์น˜์— ๋„๋‹ฌํ•˜๋ฉด ๊ทธ ์ฆ‰์‹œ ๋‚ด๋ฆฐ๋‹ค. ๋กœ๋ด‡์€ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์—์„œ ์Šค์Šค๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋กœ๋ด‡์„ ์˜ฌ๋ฆฌ๋Š” ์œ„์น˜์— ์˜ฌ๋ฆฌ๊ฑฐ๋‚˜ ๋กœ๋ด‡์ด ์–ด๋–ค ์นธ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ๊ทธ ์นธ์˜ ๋‚ด๊ตฌ๋„๋Š” ์ฆ‰์‹œ 1๋งŒํผ ๊ฐ์†Œํ•œ๋‹ค.

 

์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ๋ฅผ ์ด์šฉํ•ด ๋กœ๋ด‡๋“ค์„ ๊ฑด๋„ˆํŽธ์œผ๋กœ ์˜ฎ๊ธฐ๋ ค๊ณ  ํ•œ๋‹ค. ๋กœ๋ด‡์„ ์˜ฎ๊ธฐ๋Š” ๊ณผ์ •์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ผ์ด ์ˆœ์„œ๋Œ€๋กœ ์ผ์–ด๋‚œ๋‹ค.

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

์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ ๋ช‡ ๋ฒˆ์งธ ๋‹จ๊ณ„๊ฐ€ ์ง„ํ–‰ ์ค‘์ด์—ˆ๋Š”์ง€ ๊ตฌํ•ด๋ณด์ž. ๊ฐ€์žฅ ์ฒ˜์Œ ์ˆ˜ํ–‰๋˜๋Š” ๋‹จ๊ณ„๋Š” 1๋ฒˆ์งธ ๋‹จ๊ณ„์ด๋‹ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N, K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” A1, A2, ..., A2N์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

๋ช‡ ๋ฒˆ์งธ ๋‹จ๊ณ„๊ฐ€ ์ง„ํ–‰ ์ค‘์ผ๋•Œ ์ข…๋ฃŒ๋˜์—ˆ๋Š”์ง€ ์ถœ๋ ฅํ•œ๋‹ค.

์ œํ•œ

  • 2 ≤ N ≤ 100
  • 1 ≤ K ≤ 2N
  • 1 ≤ Ai ≤ 1,000

์˜ˆ์ œ ์ž…๋ ฅ1

3 2
1 2 1 2 1 2

์˜ˆ์ œ ์ถœ๋ ฅ1

2

ํ’€์ด

- ๋กœ๋ด‡์„ ์˜ฎ๊ธฐ๋Š” ๊ณผ์ • ์ˆœ์„œ๋Œ€๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ (์ฝ”๋“œ์— ์ฃผ์„ ์ž‘์„ฑํ•จ)

- ๋ฒจํŠธ์™€ ๋กœ๋ด‡์„ ํšŒ์ „์‹œํ‚ค๋Š” ๊ตฌํ˜„์€ deque์˜ rotate() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค

# ์‚ผ์„ฑ SW ์—ญ๋Ÿ‰ ํ…Œ์ŠคํŠธ ๊ธฐ์ถœ ๋ฌธ์ œ
# ๋ฐฑ์ค€ 20055๋ฒˆ. ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡

from collections import deque

n, k = map(int, input().split())
belt = deque(list(map(int, input().split())))
robot = deque([False] * n)

answer = 0 # ๋‹จ๊ณ„ ํšŸ์ˆ˜ ์นด์šดํŠธ
while True:
    answer += 1

    # 1)๋ฒจํŠธ๊ฐ€ ๊ฐ ์นธ ์œ„์— ์žˆ๋Š” ๋กœ๋ด‡๊ณผ ํ•จ๊ป˜ ํ•œ ์นธ ํšŒ์ „ํ•œ๋‹ค.
    belt.rotate(1)
    robot.rotate(1)

    # ๋กœ๋ด‡์ด ๋‚ด๋ฆฌ๋Š” ์œ„์น˜์— ๋„๋‹ฌํ•˜๋ฉด ์ฆ‰์‹œ ๋‚ด๋ฆฐ๋‹ค
    robot[n - 1] = False

    # 2)๊ฐ€์žฅ ๋จผ์ € ๋ฒจํŠธ์— ์˜ฌ๋ผ๊ฐ„ ๋กœ๋ด‡๋ถ€ํ„ฐ(n-2๋ฒˆ์งธ ์œ„์น˜์— ์กด์žฌ), ๋ฒจํŠธ๊ฐ€ ํšŒ์ „ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ์นธ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด๋™ํ•œ๋‹ค. ๋งŒ์•ฝ ์ด๋™ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๊ฐ€๋งŒํžˆ ์žˆ๋Š”๋‹ค
    for i in range(n - 2, -1, -1):
        # ๋กœ๋ด‡์ด ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋™ํ•˜๋ ค๋Š” ์นธ์— ๋กœ๋ด‡์ด ์—†์œผ๋ฉฐ, ๊ทธ ์นธ์˜ ๋‚ด๊ตฌ๋„๊ฐ€ 1 ์ด์ƒ ๋‚จ์•„ ์žˆ์–ด์•ผ ํ•œ๋‹ค
        if robot[i] == True and robot[i + 1] == False and belt[i + 1] >= 1:
            robot[i], robot[i + 1] = False, True
            belt[i + 1] -= 1

    # ๋กœ๋ด‡์ด ๋‚ด๋ฆฌ๋Š” ์œ„์น˜์— ๋„๋‹ฌํ•˜๋ฉด ์ฆ‰์‹œ ๋‚ด๋ฆฐ๋‹ค
    robot[n - 1] = False

    # 3)์˜ฌ๋ฆฌ๋Š” ์œ„์น˜์— ์žˆ๋Š” ์นธ์˜ ๋‚ด๊ตฌ๋„๊ฐ€ 0์ด ์•„๋‹ˆ๋ฉด ์˜ฌ๋ฆฌ๋Š” ์œ„์น˜์— ๋กœ๋ด‡์„ ์˜ฌ๋ฆฐ๋‹ค
    if belt[i] > 0:
        robot[i] = True
        belt[i] -= 1

    # 4)๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ์นธ์˜ ๊ฐœ์ˆ˜๊ฐ€ K๊ฐœ ์ด์ƒ์ด๋ผ๋ฉด ๊ณผ์ •์„ ์ข…๋ฃŒํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด 1๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐ„๋‹ค
    if belt.count(0) >= k:
        break

print(answer)

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜

๋”๋ณด๊ธฐ

- ๊ตฌํ˜„

- ์‹œ๋ฎฌ๋ ˆ์ด์…˜

728x90