๋ฌธ์
๊ธธ์ด๊ฐ 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์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๋ช ๋ฒ์งธ ๋จ๊ณ๊ฐ ์งํ ์ค์ผ๋ ์ข ๋ฃ๋์๋์ง ์ถ๋ ฅํ๋ค.
https://www.acmicpc.net/problem/20055
๐ก ํ์ด ๋ฐ ์ฝ๋
- 1์ฐจ ์๋ ์ฝ๋
from collections import deque
n, k = map(int, input().split())
data = list(map(int, input().split()))
belt1, belt2 = deque(reversed(data[:n])), deque(reversed(data[n:]))
robot = deque([0]*n)
count, result = 0, 0
while count < k:
result += 1
belt2.append(belt1.popleft())
belt1.append(belt2.popleft())
robot.popleft()
robot.append(0)
if robot[0] == 1:
robot[0] = 0
for i in range(1, n):
if robot[i] == 1 and robot[i-1] == 0 and belt1[i-1] > 0:
belt1[i-1] -= 1
robot[i], robot[i-1] = 0, 1
if belt1[-1] > 0:
belt1[-1] -= 1
robot[-1] = 1
temp = 0
for i in range(n):
if belt1[i] == 0:
temp += 1
if belt2[i] == 0:
temp += 1
count = temp
print(result)
๋ก๋ด์ ์ฎ๊ธฐ๋ ๊ณผ์ ์ ์์๋๋ก ๊ตฌํํ๋ค. ์์ ๊ฐ์ด ๋จ๊ณ์ ๋๋นํ๋ while๋ฌธ ์์์ n๋ฒ์ ๋ฐ๋ณต์ ๋๊ธฐ ๋๋ฌธ์ Python3๋ก ์ ์ถ ์ ์๊ฐ์ด๊ณผ๊ฐ ๋ฌ๋ค. ๋ฐ๋ผ์, ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ค.
- ์ต์ข ์ ์ถ ์ฝ๋
from collections import deque
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
data = list(map(int, input().split()))
belt1, belt2 = deque(reversed(data[:n])), deque(reversed(data[n:]))
robot = deque([0]*n)
count, result = 0, 0
while count < k:
result += 1
belt2.append(belt1.popleft())
belt1.append(belt2.popleft())
robot.popleft()
robot.append(0)
if robot[0] == 1:
robot[0] = 0
if sum(robot):
for i in range(1, n):
if robot[i] == 1 and robot[i-1] == 0 and belt1[i-1] > 0:
belt1[i-1] -= 1
if belt1[i-1] == 0:
count += 1
robot[i], robot[i-1] = 0, 1
if belt1[-1] > 0:
belt1[-1] -= 1
if belt1[-1] == 0:
count += 1
robot[-1] = 1
print(result)
์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์์ ์์ง์ผ ์ ์๋ ๋ก๋ด์ ์ฐพ๋ for๋ฌธ์ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ง ์คํ๋๋๋ก ์กฐ๊ฑด๋ฌธ์ ์ถ๊ฐํ๊ณ , ๋ด๊ตฌ๋๊ฐ 0์ธ ์นธ์ ๊ฐ์๋ฅผ ๊ตฌํ ๋ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด ์ผ์ผ์ด ์ธ์ง ์๊ณ ๋ด๊ตฌ๋๋ฅผ -1ํ๋ ๊ตฌ๊ฐ๋ง๋ค ๋ด๊ตฌ๋๊ฐ 0์ด ๋์๋์ง ํ์ธํด 0์ด ๋ ๋๋ง๋ค countํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ์์ ํ๋ค. ๊ทธ ๊ฒฐ๊ณผ, ์๊ฐ์ด๊ณผ ์์ด ์ ์ ์ ์ถ๋์๋ค.
'Algorithm > ๐ Baekjoon Judge' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 15683๋ฒ ๊ฐ์ - ํ์ด์ฌ(Python) (0) | 2022.04.04 |
---|---|
[BOJ] ๋ฐฑ์ค 14499๋ฒ ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ - ํ์ด์ฌ(Python) (0) | 2022.04.02 |
[BOJ] ๋ฐฑ์ค 16234๋ฒ ์ธ๊ตฌ ์ด๋ - ํ์ด์ฌ(Python) (1) | 2022.03.31 |
[BOJ] ๋ฐฑ์ค 14500๋ฒ ํ ํธ๋ก๋ฏธ๋ ธ - ํ์ด์ฌ(Python) (0) | 2022.03.31 |
[BOJ] ๋ฐฑ์ค 3190๋ฒ ๋ฑ - ํ์ด์ฌ(Python) (3) | 2022.02.23 |