๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[BAEKJOON python] 20055_์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡ ๋ณธ๋ฌธ

๐Ÿฆฅ ์ฝ”ํ…Œ/BAEKJOON

[BAEKJOON python] 20055_์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡

์ง•์ง•์•ŒํŒŒ์นด 2023. 4. 8. 18:43
728x90
๋ฐ˜์‘ํ˜•
์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ ์œ„์˜ ๋กœ๋ด‡
๊ธธ์ด๊ฐ€ N์ธ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ
๊ธธ์ด๊ฐ€ 2N์ธ ๋ฒจํŠธ๊ฐ€ ์ด ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ๋ฅผ ์œ„์•„๋ž˜๋กœ ๊ฐ์‹ธ๋ฉฐ ๋Œ๊ณ  ์žˆ๋‹ค
    ๋ฒจํŠธ๋Š” ๊ธธ์ด 1 ๊ฐ„๊ฒฉ์œผ๋กœ 2N๊ฐœ์˜ ์นธ์œผ๋กœ ๋‚˜๋‰˜์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋‹ค

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

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

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

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

์ฒซ์งธ ์ค„์— N, K
๋‘˜์งธ ์ค„์—๋Š” A1, A2, ..., A2N
deque.append(item): item์„ ๋ฐํฌ์˜ ์˜ค๋ฅธ์ชฝ ๋์— ์‚ฝ์ž…
deque.appendleft(item): item์„ ๋ฐํฌ์˜ ์™ผ์ชฝ ๋์— ์‚ฝ์ž…
deque.pop(): ๋ฐํฌ์˜ ์˜ค๋ฅธ์ชฝ ๋ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋™์‹œ์— ๋ฐํฌ์—์„œ ์‚ญ์ œ
deque.popleft(): ๋ฐํฌ์˜ ์™ผ์ชฝ ๋ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋™์‹œ์— ๋ฐํฌ์—์„œ ์‚ญ์ œ
deque.extend(array): ์ฃผ์–ด์ง„ ๋ฐฐ์—ด(array)์„ ์ˆœํ™˜ํ•˜๋ฉด์„œ ๋ฐํฌ์˜ ์˜ค๋ฅธ์ชฝ์— ์ถ”๊ฐ€
deque.extendleft(array): ์ฃผ์–ด์ง„ ๋ฐฐ์—ด(array)์„ ์ˆœํ™˜ํ•˜๋ฉด์„œ ๋ฐํฌ์˜ ์™ผ์ชฝ์— ์ถ”๊ฐ€
deque.remove(item): item์„ ๋ฐํฌ์—์„œ ์ฐพ์•„ ์‚ญ์ œ
deque.rotate(num): ๋ฐํฌ๋ฅผ num๋งŒํผ ํšŒ์ „ (์–‘์ˆ˜๋ฉด ์˜ค๋ฅธ์ชฝ, ์Œ์ˆ˜๋ฉด ์™ผ์ชฝ)
from collections import deque

# ๊ธธ์ด๊ฐ€ N์ธ ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ, ๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ์นธ์˜ ๊ฐœ์ˆ˜๊ฐ€ K๊ฐœ
n, k = map(int, input().split())
queue = deque()

belt = list(map(int, input().split()))
# ์ปจ๋ฒ ์ด์–ด ๋ฒจํŠธ์˜ ๋‚ด๊ตฌ์„ฑ์„ ์ €์žฅํ•  ํ
queue.extend(belt)
# ๋กœ๋ด‡์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ํ
robot = deque([0] * n)

cnt = 0
while True:
    cnt += 1
    # 1. ๋ฒจํŠธ ํšŒ์ „
    queue.rotate(1)
    robot.rotate(1)

    # ๋กœ๋ด‡์ด ๋‚ด๋ ค๊ฐ€๋Š” ๋ถ€๋ถ„์ด๋‹ˆ 0
    robot[-1] = 0

    # 2. ๋ฒจํŠธ์œ„์—์„œ ๋กœ๋ด‡ ์ด๋™
    if 1 in robot:
        for i in range(n-1, 0, -1): # ๋์—์„œ๋ถ€ํ„ฐ ํ™•์ธ
            if not robot[i] and robot[i-1] and queue[i] > 0:
                # ํ˜„์žฌ ์นธ ๋กœ๋ด‡์ด ์—†๊ณ ,
                # ์•ž ์นธ์˜ ๋ฒจํŠธ ์œ„์— ๋กœ๋ด‡์ด ์žˆ๊ณ ,
                # ํ˜„์žฌ ์นธ ๋‚ด๊ตฌ๋„๊ฐ€ 1์ด์ƒ์ผ ๋•Œ ์˜ฎ๊ธฐ๊ธฐ
                queue[i] -= 1  # ๋‚ด๊ตฌ๋„ ๊น๊ณ 
                robot[i] = 1 # ๋กœ๋ด‡ O -> 1
                robot[i-1] = 0

    # ๋‚ด๋ฆฌ๋Š” ์œ„์น˜์— ๋กœ๋ด‡์ด ์žˆ๋‹ค๋ฉด ๋‚ด๋ฆฐ๋‹ค
    robot[-1] = 0

    # 3. ์˜ฌ๋ฆฌ๋Š” ์œ„์น˜์— ์žˆ๋Š” ์นธ์˜ ๋‚ด๊ตฌ๋„๊ฐ€ 0์ด ์•„๋‹ˆ๋ผ๋ฉด ์˜ฌ๋ฆฌ๋Š” ์œ„์น˜์— ๋กœ๋ด‡ ์˜ฌ๋ฆฐ๋‹ค
    if queue[0] > 0 and not robot[0]:
        queue[0] -= 1
        robot[0] = 1
    # 4. ๋‚ด๊ตฌ๋„๊ฐ€ 0์ธ ์นธ์˜ ๊ฐœ์ˆ˜๊ฐ€ K๊ฐœ ์ด์ƒ์ด๋ฉด ๊ณผ์ • ์ข…๋ฃŒ
    if queue.count(0) >= k:
        print(cnt)
        break

์˜ˆ์ œ ์ž…๋ ฅ

3 2
1 2 1 2 1 2

์˜ˆ์ œ ์ถœ๋ ฅ

2

 

 

์•Š์ด..

๋‚ด๊ฐ€ ๊ตญ์–ด๋ฅผ ๋ชปํ•˜๊ธด ํ•˜๋Š”๋ฐ

๋ฌธ์ œ ์ดํ•ด๋ฅผ ๋ชปํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ

https://deok2kim.tistory.com/335 

๋•๋ถ„์—

์ดํ•ด๊ฐ€ ๋˜์—ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹น :-)

728x90
๋ฐ˜์‘ํ˜•
Comments