카테고리 없음

전기버스 문제

황성안 2021. 2. 10. 10:20
728x90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#리얼 이동하며 확인하고 뒤로갔다 앞으로갔다
=int(input())
 
for tc in range(1,T+1):
    #K : 이동 가능 거리
    #N : 마지막 종점 위치
    #M : 충전소의 개수
    K, N, M =map(int,input().split())
 
    charge =map(int,input().split())
 
    bus_stop = [0* (N+1)
 
    #================================================= 충전소 표시.
    # for i in range(M):
        # bus_stop[charge[i]] = 1
 
    for i in charge:
        bus_stop[i] = 1
 
    bus = 0 #버스 위치
    ans = 0 #충전 회수
 
    while True:
        #버스가 이동할 수 있는 만큼 이동을 하자.
        bus += K
        if bus >= N : break # 종점 도착 or 종점을 지나 더 나아감
 
        for i in range(bus, bus-K, -1):
            #if bus_stop[i] == 1:
            if bus_stop[i]: # 답이 있냐? 1이냐? 그럼 true
                ans += i
                bus = i
                break
            #충전기를 못 찾을때
            else:
                ans = 0
                break
 
    print("#{} {}".format(tc, ans))
 
#======================================================================================================================
#[0,1,3,5,7,9,10] last = 0
# 충전기의 사이 값이 k 값보다 커버리면 그냥 바로 종료
# 만약에 전부 갈수있다면? 일단 가보는 것.
# 버스의 위치 (last = 0) + k
# 정류장이 없는 위치 무시, 충전기위치 확인해서 간소하게 이동하는 방법이다.
 
=int(input())
 
for tc in range(1,T+1):
    K, N, M =map(int,input().split())
 
    charge =map(int,input().split())
    ans = 0
 
    #아래 3개 모두 같은 코드
    charge= [0+ charge + [N]
    #charge.insert(0,0)
    #charge.append(N)
 
    last = 0
 
    #충전소에 출발점과 도착지를 넣어 놓았으므로
    for i in range(1, M+2):
        if charge[i] - charge[i-1> K:
            ans = 0
            break
 
        #갈 수 있으면 아무작업 X
        #갈 수 없다면 내 바로직전 충전소로 위치를 옮기고 횟수 1회 증가
        if charge[i] > last + K:
            last = charge[i-1]
            ans += 1
 
    print("#{} {}".format(tc, ans))
cs
728x90