본문 바로가기

알고리즘 문제풀이

Swea D2_14955 전기버스 Python

"""
정류장 0 ~ n+1
한번 충전으로 최대 k감
충전기 설치 m개의 정류장
최소 몇번으로 종점 도착
종점에 도착x == 0

"""

t = int(input())
for tc in range(1,t+1):
    k,n,m = map(int,input().split()) # 5 10 3
    arr = list(map(int,input().split())) # [1,3,5,7,9]
    x = 0
    cnt = 0
    arr = [0] + arr + [n] # 마지막 n(종점)과 시작점(0)의 위치를 기록 [0,1,3,5,7,9,10]

    for i in range(len(arr)):
        # 버스가 앞으로 못갈 때
        if arr[i] - arr[i-1] > k:
            cnt = 0
            break
        # 버스가 앞으로 갈 수 있는데, k 만큼 이동 한 현재 위치가 충전기가 있는 정류장 보다 작을 때, 그 이전 충전기 위치로 간다
        elif x + k < arr[i]:
            x = arr[i-1]
            cnt += 1
    print(f'#{tc} {cnt}')

실수한점

1. 버스 정류장의 위치로만 했었음

시작점과 끝점도 같이 리스트로서 사용해야했음,

- 끝점을 명시하지 않으면 최대 거리로 딱 도착했을 때 횟수를 세지 않음

- 시작점을 명시하지 않으면, 리스트의 i번쨰가 제대로 비교가 되지 않아서 테스트케이스 중 9개만 맞게 됨

2. 버스가 앞으로 갈 수 있는 조건을 버스가 앞으로 못갈 때의 조건으로 처음에 코드를 짰었다.