링크 : https://www.acmicpc.net/problem/20055
20055번: 컨베이어 벨트 위의 로봇
길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부
www.acmicpc.net
- 문제
- 소요시간: 29분 10초(디버깅 : 1시간 10분)
- 설계하기(접근방법)
1. 입력하기
컨베이어벨트의 길이, 중단 개수
내구도 리스트를 입력받는다
2.구현하기
덱으로 풀면 더 쉽겠지만 덱이 익숙하지 않아서 리스트로 풀었다
또한 로봇이 있는지 없는지 체크하기 위해서 원래 리스트에다가
이중배열로 선언해서 로봇이 없으면 0
있으면 1로 표시한다
1 - 1)
한 칸 회전하는 것을
리스트의 pop 과 insert로 구현하였다
1 - 2)
그 후 벨트의 길이를 기준으로
list[n]에서 부터 역순으로
2번을 구현해준다.
만약 가장 끝의 로봇 list[n]이 이동할 수 있다면
그 다음 벨트의 내구도를 감소시키지 않고
바로 로봇을 제거 해준다
1 - 3)
내구도가 1 이상이면 로봇을 올려주고 내구도를 감소시켜준다
내구도 0인 개수가 k개 이상이면 while문을 정지한다
3. 출력하기
종료 단계를 출력한다
- 코드(출력)
belt_length, durability_max = map(int, input().split())
durability_list = list(map(int,input().split()))
for i in range(len(durability_list)):
durability_list[i] = [0, durability_list[i]]
def checkdurablility(list):
check = 0
for i in list:
if i[1] == 0:
check += 1
return check
stage = 0
while checkdurablility(durability_list) < durability_max:
stage += 1
durability_list.insert(0 ,durability_list.pop())
if durability_list[belt_length][0] == 1:
durability_list[belt_length][0] = 0
if durability_list[belt_length - 1][0] == 1:
durability_list[belt_length - 1][0] = 0
for i in range(belt_length):
## 현재 벨트에 로봇이 있고 and 다음 벨트에 로봇이 없고 and 다음 벨트의 내구도가 남은 경우
if durability_list[belt_length - 1 - i][0] == 1 and durability_list[belt_length - i][0] == 0 and durability_list[belt_length - i][1] > 0:
durability_list[belt_length - 1 - i][0] = 0
durability_list[belt_length - i][0] = 1
durability_list[belt_length - i][1] -= 1
if durability_list[belt_length][0] == 1:
durability_list[belt_length][0] = 0
if durability_list[0][1] > 0:
durability_list[0][0] = 1
durability_list[0][1] -= 1
print(stage)
- 얻어갈 부분
1. 문제 조건을 잘못 해석해서 디버깅을 하는데 상당한 시간이 소요되었다. 컨베이어 벨트 끝에 있는 로봇은 그 다음 벨트로 넘어갈 때, 내구도를 감소시키지 않는다. 감소시키는 케이스로 지문을 잘못 해석해서 오류를 찾질 못했다. 지문을 좀 더 자세히 읽어보자
'알고리즘(백준) > 구현' 카테고리의 다른 글
[알고리즘/구현] 14891번 : 톱니바퀴 - python (0) | 2024.02.14 |
---|---|
[알고리즘/구현] 21608번 : 상어 초등학교 - python (0) | 2024.02.14 |
[알고리즘/구현] 2563번 : 색종이 - python (0) | 2023.12.31 |
[알고리즘/구현] 14503번 : 로봇 청소기 - python (1) | 2023.12.29 |
[알고리즘/구현] 1138번 : 한 줄로 서기 - python (0) | 2023.12.29 |