728x90
📌 문제
https://swexpertacademy.com/main/main.do
📌 문제 접근 방법
- 진짜로 버스가 움직인다고 생각하고 코드를 짜봤다.
- energy는 버스가 가지고 있는 에너지! 에너지가 다 닳아서 0이 되면 이동할 수 없다.
- cnt 를 통해 충전한 횟수를 저장
- bus는 현재 버스의 위치를 저장한다.
- while문 안에 들어와서는
- 버스가 한 칸 앞으로 이동했으니까 위치는 bus += 1
- 이동하면서 에너지를 소모했으니까 energy -= 1
- 그리고 만약 버스가 충전기가 있는 정류장에 도착한다면
- 충전기 리스트에서 현재 도착한 정류장을 빼준다 (station.pop())
- 그리고 만약 station이 완전히 비게 되면 최종 종점을 추가해준다.
- 현재 도착한 정류장을 리스트에서 뺐기 때문에 station[0]은 다음 정류장 위치!
- 다음 정류장 위치와 현재 위치를 통해서 이동 거리를 계산하고 이동거리보다 에너지가 적을 때는 에너지를 충전해준다.
- 위와 같은 과정을 반복하다가 버스가 종점에 도착하면 while문 종료
- 도착하기 전에 에너지를 모두 소모해버리면 cnt는 0으로 초기화하고 종료해준다.
나는 버스의 움직임에 따라서 똑같은 순서로 코드를 구현해봤는데, 다른 코드를 보니 최대 이동거리만큼 우선 이동한 후, 에너지가 부족하면 다시 뒤로 오면서 충전소를 찾는 식으로 구현한 사람도 있었다! 참고참고!
📌 코드
import sys
sys.stdin = open('input.txt')
T = int(input())
for t in range(1, T+1):
'''
K : 한 번 충전으로 최대 이동 횟수
N : 종점
M : 충전기 설치된 정류장 수
'''
K, N, M = map(int, input().split())
station = list(map(int, input().split()))
energy = K
cnt = 0
bus = 0
while True:
bus += 1
energy -= 1
if bus in station :
if bus == station[0] :
station.pop(0)
# 다음 정류장이 없으면 종점 추가
if not station :
station.append(N)
# 다음 정류장과 최대 이동 횟수 비교해서 충전
if energy < station[0]-bus :
energy = K
cnt += 1
if bus == N : # 버스가 종점에 도착
break
elif not energy : # 도착하기 전에 이동 횟수 소진
cnt = 0
break
print(f'#{t} {cnt}')
728x90
'ALGORITHM > SW Expert Academy' 카테고리의 다른 글
[SWEA/Python] 4836. 색칠하기 (0) | 2021.08.13 |
---|---|
[SWEA/Python] 4835. 구간합 (0) | 2021.08.13 |
[SWEA/Python] 1206. View (0) | 2021.08.13 |
[SWEA/Python] 1954. 달팽이 숫자 (0) | 2021.08.09 |
[SWEA/Python] 1945. 간단한 소인수분해 (0) | 2021.08.09 |
댓글