[BOJ][๐ก5][๋ฐฑ์ค#20055] ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
๊ธธ์ด๊ฐ N์ธ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ๊ฐ ์๊ณ , ๊ธธ์ด๊ฐ 2N์ธ ๋ฒจํธ๊ฐ ์ด ์ปจ๋ฒ ์ด์ด ๋ฒจํธ๋ฅผ ์์๋๋ก ๊ฐ์ธ๋ฉฐ ๋๊ณ ์๋ค. ๋ฒจํธ๋ ๊ธธ์ด 1 ๊ฐ๊ฒฉ์ผ๋ก 2N๊ฐ์ ์นธ์ผ๋ก ๋๋์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ ์นธ์๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 1๋ถํฐ 2N๊น์ง์ ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๋ค.
๋ฒจํธ๊ฐ ํ ์นธ ํ์ ํ๋ฉด 1๋ฒ๋ถํฐ 2N-1๋ฒ๊น์ง์ ์นธ์ ๋ค์ ๋ฒํธ์ ์นธ์ด ์๋ ์์น๋ก ์ด๋ํ๊ณ , 2N๋ฒ ์นธ์ 1๋ฒ ์นธ์ ์์น๋ก ์ด๋ํ๋ค. i๋ฒ ์นธ์ ๋ด๊ตฌ๋๋ Ai์ด๋ค. ์์ ๊ทธ๋ฆผ์์ 1๋ฒ ์นธ์ด ์๋ ์์น๋ฅผ โ์ฌ๋ฆฌ๋ ์์นโ, N๋ฒ ์นธ์ด ์๋ ์์น๋ฅผ โ๋ด๋ฆฌ๋ ์์นโ๋ผ๊ณ ํ๋ค. ์ปจ๋ฒ ์ด์ด ๋ฒจํธ์ ๋ฐ์ค ๋ชจ์ ๋ก๋ด์ ํ๋์ฉ ์ฌ๋ฆฌ๋ ค๊ณ ํ๋ค. ๋ก๋ด์ ์ฌ๋ฆฌ๋ ์์น์๋ง ์ฌ๋ฆด ์ ์๋ค. ์ธ์ ๋ ์ง ๋ก๋ด์ด ๋ด๋ฆฌ๋ ์์น์ ๋๋ฌํ๋ฉด ๊ทธ ์ฆ์ ๋ด๋ฆฐ๋ค. ๋ก๋ด์ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์์ ์ค์ค๋ก ์ด๋ํ ์ ์๋ค. ๋ก๋ด์ ์ฌ๋ฆฌ๋ ์์น์ ์ฌ๋ฆฌ๊ฑฐ๋ ๋ก๋ด์ด ์ด๋ค ์นธ์ผ๋ก ์ด๋ํ๋ฉด ๊ทธ ์นธ์ ๋ด๊ตฌ๋๋ ์ฆ์ 1๋งํผ ๊ฐ์ํ๋ค. ์ปจ๋ฒ ์ด์ด ๋ฒจํธ๋ฅผ ์ด์ฉํด ๋ก๋ด๋ค์ ๊ฑด๋ํธ์ผ๋ก ์ฎ๊ธฐ๋ ค๊ณ ํ๋ค. ๋ก๋ด์ ์ฎ๊ธฐ๋ ๊ณผ์ ์์๋ ์๋์ ๊ฐ์ ์ผ์ด ์์๋๋ก ์ผ์ด๋๋ค.
๋ฒจํธ๊ฐ ๊ฐ ์นธ ์์ ์๋ ๋ก๋ด๊ณผ ํจ๊ป ํ ์นธย ํ์ ํ๋ค. ๊ฐ์ฅ ๋จผ์ ๋ฒจํธ์ ์ฌ๋ผ๊ฐ ๋ก๋ด๋ถํฐ, ๋ฒจํธ๊ฐ ํ์ ํ๋ ๋ฐฉํฅ์ผ๋ก ํ ์นธ ์ด๋ํ ์ ์๋ค๋ฉด ์ด๋ํ๋ค. ๋ง์ฝ ์ด๋ํ ์ ์๋ค๋ฉด ๊ฐ๋งํ ์๋๋ค.
๋ก๋ด์ด ์ด๋ํ๊ธฐ ์ํด์๋ ์ด๋ํ๋ ค๋ ์นธ์ ๋ก๋ด์ด ์์ผ๋ฉฐ, ๊ทธ ์นธ์ ๋ด๊ตฌ๋๊ฐ 1 ์ด์ ๋จ์ ์์ด์ผ ํ๋ค.
์ฌ๋ฆฌ๋ ์์น์ ์๋ ์นธ์ ๋ด๊ตฌ๋๊ฐ 0์ด ์๋๋ฉด ์ฌ๋ฆฌ๋ ์์น์ ๋ก๋ด์ ์ฌ๋ฆฐ๋ค. ๋ด๊ตฌ๋๊ฐ 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
์ถ๋ ฅ
2
์์ 2
์ ๋ ฅ
3 6
10 10 10 10 10 10
์ถ๋ ฅ
31
์์ 3
์ ๋ ฅ
4 5
10 1 10 6 3 4 8 2
์ถ๋ ฅ
24
์์ 4
์ ๋ ฅ
5 8
100 99 60 80 30 20 10 89 99 100
์ถ๋ ฅ
472
My Sol
from collections import deque
def Rotate():
global status, CV
CV.appendleft(CV.pop())
k = N-1
while k > 0:
status[k] = status[k-1]
k -= 1
status[0] = status[N-1] = 0
def Move(i):
global status, CV
k = i
while k > 0:
if status[k-1] and not status[k] and CV[k]:
status[k], status[k-1] = 1, 0
checkHurt(k)
CV[k] -= 1
k -= 1
def Insert():
global status, CV
if not CV[0]: return
status[0] = 1
checkHurt(0)
CV[0] -= 1
def checkHurt(i):
if CV[i]==1:
global hurt
hurt += 1
N, K = map(int, input().split())
CV = deque(list(map(int, input().split())))
status = deque([0]*N)
cnt = 0
hurt = 0
while hurt < K:
Rotate()
Move(N-1)
status[N-1] = 0
Insert()
cnt += 1
print(cnt)
์ ๋ง ๊ตฌํ๋ฌธ์ ์๋ค. ๋ฌธ์ ์์ ์ ์๋๋๋ก ์์๋๋ก ํ์ , ์ด๋, ๋ด๋ ค๋๊ธฐ ์ ๊ณผ์ ์ ์ค์ํ๋ ๊ฐ๊ฐ์ ํจ์ Rotate(), Move(), Insert() ํจ์๋ฅผ ์์ฑํ์ฌ ๋ชจ๋ํํ์๊ณ , ๋ก๋ด์ ๋ด๋ ค๋๊ฑฐ๋ ์ด๋ํ๊ธฐ ์ ์ ํด๋น ์ขํ์ ๋ด๊ตฌ๋๊ฐ 1์ด๋ผ๋ฉด ์ ์ญ๋ณ์ hurt๋ฅผ 1 ๋๋ฆฌ๊ณ ์ด๋์์ผฐ๋ค. ๋งค๋ฒ 0์ ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋ชจ๋ฒ๋ต์
from collections import deque
import sys
read = sys.stdin.readline
# ๋ฒจํธ๊ฐ ํ ์นธ ํ์ ํ๋ค.
def rotate():
A.appendleft(A.pop())
robots.appendleft(robots.pop())
# ํ์ ํ ๋ด๋ฆฌ๋ ์์น์ ๋ก๋ด์ด ์๋ค๋ฉด ๋ก๋ด์ ์์ ์ค๋ค
robots[N - 1] = False
# ๋ก๋ด์ด ๋ฒจํธ ํ์ ๋ฐฉํฅ์ผ๋ก ํ ์นธ ์ด๋ํ๋ค.
def move():
for index in range(N - 2, 0 - 1, -1): # up <- down ์์ผ๋ก ๊ฐ ์นธ๋ณ๋ก ํ์ธ
if robots[index] and not robots[index + 1] and A[index + 1] >= 1: # ์์ง์ผ ์ ์์ผ๋ฉด
robots[index] = False # ํ์ฌ ์์น์์
add_robot(index + 1) # ๋ค์ ์์น๋ก ์ด๋
if index + 1 == N - 1: # ๋ก๋ด์ด ๋ด๋ฆฌ๋ ์์น๋ก ์์ง์์ผ๋ฉด
robots[index + 1] = False
# index ์์น์ ๋ก๋ด์ ์ถ๊ฐํ๋ค.
def add_robot(index):
if A[index] >= 1:
robots[index] = True
A[index] -= 1 # ๋ด๊ตฌ๋ ๊ฐ์
if A[index] == 0:
zero_count[0] += 1
# N: ๋ฒจํธ์ ๊ธธ์ด 2, K: ์ข
๋ฃ ์กฐ๊ฑด (๋ด๊ตฌ๋๊ฐ K๊ฐ ์ด์์ด๋ฉด ์ข
๋ฃ)
N, K = map(int, read().split())
# A: ๊ฐ ์นธ์ ๋ด๊ตฌ๋
A = deque(map(int, read().split(" ")))
# ๋ก๋ด์ด ์์นํด์๋์ง ์ฌ๋ถ
robots = deque([False] * N)
# ๋ด๊ตฌ๋๊ฐ 0์ธ ์นธ์ ๊ฐ์
zero_count = [0]
step = 0
while zero_count[0] < K:
rotate()
move()
add_robot(0)
step += 1
print(step)
์ฐ์ฐ์๊ฐ์ด ๊ฑฐ์ ์ ๋ฐ์ธ ์ฝ๋๋ฅผ ๊ฐ์ ธ์๋ค.
๊ฑฐ์ ๋๋ถ๋ถ์ ์ฝ๋๊ฐ ์ผ์นํ๋๋ฐ rotate์์ ๋ก๋ด์ ์ํ๋ฅผ ๋ณํ์ํด์ ์์ด ๋๋ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ชจ๋ ๋๋ ค์ฃผ์ด ๊ฐ์ ๋ฐ์ด์ ๋ฐ๊ฟ์ฃผ์๋๋ฐ, status๋ deque์ธ๋งํผ CV์ ๋๊ฐ์ด pop, appendleft ํด์ฃผ๋ฉด ๋๋ ๊ฒ์ด์๋ค. ๋๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ฐ๊ฟ๋ณด๋ ์ฐ์ฐ์๊ฐ์ด 4500ms์์ 2500ms๋ก ๊ฐ์ํ์๋ค.
์กฐ๊ธ์ ๋ณํ๊ฐ ์ด๋ ๊ฒ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋๋ ๋ฌด์จ ์ฝ๋๋ฅผ ์ง๋ ์ ๊ณ ๋ คํด๋ณผ ์ผ์ด๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ