Notice
Recent Posts
Recent Comments
Link
코딩 공부
[Python] 백준 20055번 : 컨베이어 벨트 위의 로봇 본문
728x90
<접근 방법>
- 과정이 순서대로 나와있는 '시뮬레이션' 유형이므로 문제에서 시키는 그대로 해야 함에 유의한다.
- 컨베이어 벨트의 길이는 2N, 로봇이 올라갈 수 있는 길이는 N임을 알아낸다.
- [1]단계에서 벨트는 마지막 부분을 떼어서 맨앞으로 붙이고,
로봇은 같은 방식이지만 마지막 칸의 경우 즉시 로봇을 내린다 하였으므로 로봇을 없애준다. - [2]단계에서 가장 먼저 벨트에 올라간 로봇부터 이동 가능 여부를 살펴보므로 for문을 뒤에서부터 돌려
로봇이 존재하고, 다음 칸에 로봇이 없고, 다음 칸의 내구도가 존재한다면 로봇을 옮기고 내구도도 깎고 내구도가 0이 될 경우, K의 값을 -1 해준다. - [3]단계에서는 가장 앞 칸의 내구도가 0이 아니면 로봇을 올리고, 내구도를 깎고, 내구도가 0이 될 경우 K에 -1을 해준다.
- [4]단계에서는 여태 깎은 K의 값이 0이하이면 과정을 종료시킨다.
N, K = map(int, input().split())
belt = list(map(int, input().split()))
robot = [0]*N
turn = 0
while True:
turn += 1
# [1] 벨트가 각 칸 위에 있는 로봇과 함께 한 칸 이동한다.
belt = [belt.pop()] + belt
robot = [0] + robot[:-2] + [0]
# [2] 한 칸 이동 가능하다면 이동
for i in range(N-2, -1, -1):
if robot[i] and not robot[i+1] and belt[i+1]:
robot[i] = 0
robot[i+1] = 1
belt[i+1] -= 1 # 내구도 깎기
if belt[i+1] == 0:
K -= 1
# [3] 올리는 위치에 내구도가 0이 아니면 로봇을 올린다.
if belt[0]:
robot[0] = 1
belt[0] -= 1 # 내구도 깎기
if belt[0] == 0:
K -= 1
# [4] 내구도가 0인 칸의 개수가 K개 이상이면 과정을 종료한다.
if K <= 0:
print(turn)
break
이해가 되지 않는 부분이 있으면 질문 주세요. 감사합니다.
728x90
'삼성 SW 역량 테스트 기출 문제' 카테고리의 다른 글
[Python](시뮬) 백준 21610번 : 마법사 상어와 비바라기 (2) | 2024.01.29 |
---|---|
[Python](시뮬) 백준 21608번 : 상어 초등학교 (2) | 2024.01.28 |
[Python](구현, 조합) 백준 15685번 : 치킨 배달 (0) | 2024.01.18 |
[Python](구현) 백준 14891번 : 톱니바퀴 (0) | 2024.01.18 |
[Python](구현) 백준 14503번 : 로봇 청소기 (0) | 2024.01.17 |