[SWEA] 전기버스 [PYTHON]

5693 단어 SWEASWEA

A도시는 전기버스를 운행하려고 한다. 전기버스는 한번 충전으로 이동할 수 있는 정류장 수가 정해져 있어서, 중간에 충전기가 설치된 정류장을 만들기로 했다.

버스는 0번에서 출발해 종점인 N번 정류장까지 이동하고, 한번 충전으로 최대한 이동할 수 있는 정류장 수 K가 정해져 있다.

충전기가 설치된 M개의 정류장 번호가 주어질 때, 최소한 몇 번의 충전을 해야 종점에 도착할 수 있는지 출력하는 프로그램을 만드시오.

만약 충전기 설치가 잘못되어 종점에 도착할 수 없는 경우는 0을 출력한다. 출발지에는 항상 충전기가 설치되어 있지만 충전횟수에는 포함하지 않는다.

한 3일 동안 문제를 이해하지도 못했다. 그런데 계속 보다 보니 알겠네.

헷갈리는건 while문 안의 for문에서 break를 쓰면 다시 while문 최상단으로 갈 수 있다는 거,,!! 왜 continue가 아니지 생각했지만 더 생각해야지.

for tc in range(1, int(input())+1):
    K, N, M = list(map(int, input().split()))
    charge = list(map(int, input().split()))

    stop = [0] * (N+1)  

    idx = 0
    cnt = 0

    for i in charge:  #stop에다가 충전소 위치를 담음
        stop[i] = 1


    while True:
        idx += K

        if idx >= N: # 정류소 위치가 N개를 넘지 않을동안
            break


		# 현재 위치로부터 K개 만큼 뺀 거리까지 충전소가 있으면
        # cnt에 1을 추가하고 인덱스를 k로 바꾸기
        for k in range(idx, idx - K, -1):
            if stop[k] == 1:
                cnt += 1
                idx = k
                break

# 충전소가 없다면 = for문을 거치지 않는다면 cnt = 0 , break
        else:
            cnt = 0
            break

    print('#{} {}'.format(tc, cnt))

호호호,,
알고리즘 2일차에게는
수능 30번 문제같았다.

좋은 웹페이지 즐겨찾기