<๋ฌธ์ ๋งํฌ>
https://www.acmicpc.net/problem/20055
20055๋ฒ: ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด
๊ธธ์ด๊ฐ N์ธ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ๊ฐ ์๊ณ , ๊ธธ์ด๊ฐ 2N์ธ ๋ฒจํธ๊ฐ ์ด ์ปจ๋ฒ ์ด์ด ๋ฒจํธ๋ฅผ ์์๋๋ก ๊ฐ์ธ๋ฉฐ ๋๊ณ ์๋ค. ๋ฒจํธ๋ ๊ธธ์ด 1 ๊ฐ๊ฒฉ์ผ๋ก 2N๊ฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ ์นธ์๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 1๋ถ
www.acmicpc.net
<ํ์ด ์ ๋ต>
1. ์ฃผ์ด์ง ์กฐ๊ฑด๋๋ก ๊ตฌํํ๋ฉด ๋๋ ๊ตฌํ ๋ฌธ์ ์ด๋ค.
2. ํฌ๊ฒ ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ด๋ ๊ตฌํ์ ํ์ ์๊ณ ๋ฌธ์ ์ฝ๊ณ ๋จ๊ณ๋ณ๋ก ๊ฐ ๋์์ ๊ผผ๊ผผํ ๊ตฌํํ๋ฉด ๋ฌด๋ํ๊ฒ ํต๊ณผ ๋๋ค.
3. ๋ฒจํธ ํ์ ์ deque์ rotate() ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด ํธํ๊ณ ๋ก๋ด์ ๋ฐฐ์ด ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ฐํฌ๋ณด๋ค ๊ทธ๋ฅ ๋ฆฌ์คํธ๊ฐ ํธํ๊ณ ๋น ๋ฅด๋ค.
<์ ๋ต ์ฝ๋>
from collections import deque
import sys, os, io, atexit
input = lambda: sys.stdin.readline().rstrip('\r\n')
stdout = io.BytesIO()
sys.stdout.write = lambda s: stdout.write(s.encode("ascii"))
atexit.register(lambda: os.write(1, stdout.getvalue()))
# 220927 20055 ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด
# ์ ๋ต์ฝ๋
# rotate: ๋ฒจํธ ํ์
def rotate_belt():
# ๋ฒจํธ ํ์
belt.rotate()
# ๋ฒจํธ ์์ ๋ก๋ด ํ์ (๋ด๋ฆฌ๋ ์์น์ ๋๋ฌํ๋ฉด ์ฆ์ ๋ด๋ฆฐ๋ค)
robot.pop()
robot.insert(0, 0)
return
# move_robot: ๋ก๋ด ์ด๋
def move_robot():
# ๋ด๋ฆฌ๋ ์์น์ ๋๋ฌํ ๋ก๋ด
robot[-1] = 0
# ์ญ์์ผ๋ก ์ด๋ ๊ฐ๋ฅ ์ฌ๋ถ ํ์ธํ๋ฉด์ ์ ์นธ์ ๋ก๋ด์ ๋ค์ ์นธ์ผ๋ก ๊ฐ์ ธ์จ๋ค.
for i in range(N - 2, -1, -1):
# ๋ก๋ด์ด ์์ ๊ฒฝ์ฐ
if robot[i]:
# ๋ค์ ์นธ์ ๋ก๋ด์ด ์๊ณ ๋ฒจํธ ๋ด๊ตฌ๋๊ฐ ๋จ์์์ ๊ฒฝ์ฐ
if not robot[i + 1] and belt[i + 1]:
# ๋ก๋ด ์ด๋
robot[i + 1] = 1
robot[i] = 0
# ๋ฒจํธ ๋ด๊ตฌ๋ ๊ฐ์
belt[i + 1] -= 1
# add_robot: ์ฌ๋ฆฌ๋ ์์น์ ๋ก๋ด ์ถ๊ฐ
def add_robot():
# ๋ด๊ตฌ๋๊ฐ ๋จ์์์ ๊ฒฝ์ฐ
if belt[0]:
# ๋ก๋ด ์ถ๊ฐํ๊ณ ๋ด๊ตฌ๋ ๊ฐ์
robot[0] = 1
belt[0] -= 1
# check: ์ข
๋ฃ ์กฐ๊ฑด ๋ง์กฑํ๋์ง ํ์ธ
def check():
global idx
cnt = 0
# ์ข
๋ฃ ์กฐ๊ฑด ๋ง์กฑํ์ ๊ฒฝ์ฐ True ๋ฐํ
for durability in belt:
if durability == 0:
cnt += 1
if cnt == K:
return True
# ์๋ ๊ฒฝ์ฐ ๋จ๊ณ ์ธ๋ฑ์ค ์ธ์ฃผ๊ธฐ
idx += 1
return False
# N: ๋ฒจํธ ํ ์ชฝ ๋ฉด์ ๊ธธ์ด, K: ์ ๋ฃ ์กฐ๊ฑด
N, K = map(int, input().split())
# belt: ๋ฒจํธ ์ํ ํ robot: ๋ก๋ด ์ํ ๋ฐฐ์ด
belt = deque(map(int, input().split()))
robot = [0 for _ in range(N)]
# idx: ๋จ๊ณ ๋ฒํธ
idx = 1
# ์ข
๋ฃ ์กฐ๊ฑด ๋๊น์ง ์ํ
while True:
rotate_belt()
move_robot()
add_robot()
# ์ข
๋ฃ ์กฐ๊ฑด ๋ง์กฑ ์ ๋จ๊ณ ๋ฒํธ ์ถ๋ ฅ ํ ์ข
๋ฃ
if check():
print(idx)
break
'โญ Problem_Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 16724 ํผ๋ฆฌ ๋ถ๋ ์ฌ๋์ด (Python/ํ์ด์ฌ) (0) | 2022.10.02 |
---|---|
[๋ฐฑ์ค] 2146 ๋ค๋ฆฌ ๋ง๋ค๊ธฐ (Python/ํ์ด์ฌ) (0) | 2022.10.01 |
[๋ฐฑ์ค] 2212 ์ผ์ (Python/ํ์ด์ฌ) (2) | 2022.09.29 |
[๋ฐฑ์ค] 3190 ๋ฑ (Python/ํ์ด์ฌ) (0) | 2022.09.28 |
[๋ฐฑ์ค] 2206 ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ (Python/ํ์ด์ฌ) (1) | 2022.09.27 |
๋๊ธ