https://www.acmicpc.net/problem/20055
문제 해결을 위한 과정
이 문제의 경우 구현 문제로 문제에서 요구하는 바를 그대로 코드로 작성하면 해결할 수 있는 문제였습니다.
과정은 다음과 같습니다.
1. 로봇과 벨트를 함께 이동
2. 먼저 올린 순서대로 로봇 이동(먼저 올린 순서는 n-1번째부터 0번째까지 역순으로 이동하면 쉽게 해결 가능)
3. 로봇을 0번째에 올리기
4. 내구도가 0인 벨트의 수가 K 이상인지 확인하기.
단, 이때 2번, 3번 과정은 해당하는 벨트의 내구도가 1 감소한다는 것 그리고 1번, 2번 과정은 n-1번째에서 로봇이 내린다는 것을 적용하면 해결할 수 있습니다.
소스코드
n, k = map(int, input().split())
arr = list(map(int, input().split()))
robotInfo = []
ans = 0
for i in range(len(arr)):
robotInfo.append((arr[i], ''))
while True:
ans += 1
# 1단계
temp, robot = robotInfo[2*n-1]
for i in range(2*n-1, 0, -1):
robotInfo[i] = robotInfo[i-1]
robotInfo[0] = (temp, robot)
temp, robot = robotInfo[n-1]
robotInfo[n-1] = (temp, "")
# 2단계
for i in range(n-1, -1, -1):
temp, robot = robotInfo[i]
if robot != "":
nextTemp, nextRobot = robotInfo[i + 1]
if nextTemp >= 1 and nextRobot == "":
robotInfo[i] = (temp, "")
robotInfo[i + 1] = (nextTemp-1, "exist")
temp, robot = robotInfo[n-1]
robotInfo[n-1] = (temp, "")
# 3단계
temp, robot = robotInfo[0]
if temp >= 1:
robotInfo[0] = (temp-1, "exist")
# 4단계
cnt = 0
for i in range(0, 2*n):
temp, robot = robotInfo[i]
if temp == 0:
cnt += 1
if cnt >= k:
break
print(ans)
'알고리즘 > 백준' 카테고리의 다른 글
백준 알고리즘 17140: 이차원 배열과 연산(Python) (1) | 2024.04.12 |
---|---|
백준 알고리즘 15683: 감시(Python) (0) | 2024.04.09 |
백준 9663번: N-Queen(Python) (0) | 2024.04.06 |
백준 14891번: 톱니바퀴 (Python) (0) | 2024.04.04 |
백준 21608번: 상어 초등학교(Python) (0) | 2024.04.03 |