소스 코드
# n 컨베이어 벨트 길이, k 탈출조건
n,k = map(int,input().split())
# 컨베이어 벨트 내구도
belt = list(map(int,input().split()))
# 로봇의 위치
robot_idx = [0]*n
# 출력 단계
res = 1
# k와 비교하기 위한 값
cnt = 0
while True:
# 벨트 이동
belt.insert(0,belt.pop(-1))
# 컨베이어 벨트의 회전에 따라 로봇의 위치도 조정
# 마지막 위치는 바닥으로
# 마지막 위치에 도달한 로봇은 바닥으로 뛰어 내림
robot_idx.insert(0,0)
robot_idx.pop(-1)
robot_idx[-1] = 0
for q in range(2,n+1):
# 로봇이 올라가있고
if robot_idx[-q] != 0:
# 이동할 위치가 비어있고
# 이동할 위치의 내구도가 1 이상인 경우
# 이동하고, 내구도 감소
if robot_idx[1-q] == 0 and belt[n+1-q] > 0:
robot_idx[1 - q] = 1
robot_idx[-q] = 0
belt[n + 1 - q] -= 1
# 내구도가 0이면 cnt + 1 해주기
if belt[n + 1 - q] == 0:
cnt += 1
# 탈출조건
if cnt >= k:
break
# index 0 의 자리가 비어있고, 내구도가 1 이상이면
if robot_idx[0] == 0 and belt[0] > 0:
robot_idx[0] = 1
belt[0] -= 1
if belt[0] == 0:
cnt += 1
# 탈축조건
if cnt == k:
break
# 다 돌면 현재 단계 + 1
res += 1
print(res)
해결 방법
1. 조건을 정확이 이해하고 순서대로 작성하면 됨
ex) 로봇 = 1, 빈 자리 = 0이라고 할 때,
현재 컨베이어 벨트 위의 상태 0 1 1
1) 컨베이어 벨트 회전 > 컨베이어 벨트 위의 상태 0 0 1
2) 로봇 이동 > 내려가는 위치에 있는 로봇은 내려감 > 0 0 0
3) [0] 위치에 로봇 추가 > 1 0 0
4) 반복
이런 순서로 진행 됨, 예시의 2)을 이해하는게 쉽지 않았음...(개인적인 의견일뿐임)
느낀 점
문제 이해의 난이도 >>> 코드 작성
문장 이해력을 높여야 함... ㅠㅠㅠ
ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.
'코딩 문제해결 > 문제 풀이.백준' 카테고리의 다른 글
[BOJ/백준 코딩] 톱니바퀴 - PYTHON #14891 (0) | 2021.02.25 |
---|---|
[BOJ/백준 코딩] 연산자 끼워넣기 - PYTHON #14888 (0) | 2021.02.24 |
[BOJ/백준 코딩] 주사위 게임 - PYTHON #5566 (0) | 2021.02.22 |
[BOJ/백준 코딩] 섬의 개수 - PYTHON #4963 (0) | 2021.02.21 |
[BOJ/백준 코딩] 치킨 배달 - PYTHON #15686 (0) | 2021.02.20 |