# 3. APS/SWEA

SWEA # Python_D3_4831_전기버스

둥굴둥굴둥굴레차 2021. 2. 20. 01:05

 

 

🕵️‍♂️ [문제]

 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

[input] 
3
3 10 5
1 3 5 7 9
3 10 5
1 3 7 8 9
5 20 5
4 7 9 14 17

[output]
#1 3
#2 0
#3 4
[복습 1]
import sys
sys.stdin = open("input.txt")

T = int(input())

for tc in range(1, T+1):
    # K : 최대 이동 가능 수
    # N : 종점
    # M : 충전기 정류장 수
    K, N, M = map(int,input().split())

    # charge : 충전기 위치
    charge = list(map(int,input().split()))


    # bus_stop : 충전기 위치를 표시해줌
    bus_stop = [0]*(N+1)



    # 충전기가 있으면 1 없으면 0으로 표시해줌
    for i in charge:
        bus_stop[i] += 1

    cnt = 0
    bus = 0

    while True:
        bus += K

        if bus >= N:
            break
		# 이 부분을 생각해주지 못하여 틀렸다
        # 만약 bus위치를 넣어주었을 때
        for j in range(bus, bus-K, -1):
        	# 1이 있다면 cnt 1개 올려주고 for문을 빠져나와서
            # while문 바로 아래의 bus += K 로 돌아감
            if bus_stop[j]:
                cnt+=1
                bus = j
                break
        else:
            cnt = 0
            break

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

[풀이 2]
import sys
sys.stdin = open('input.txt')

T = int(input())

for tc in range(1, T+1):
    energy, last_busstop, charge = map(int,input().split())
    charge_list = list(map(int,input().split()))
    bus_stop = [0 for _ in range(last_busstop)]

    # bus_stop에 충전기 표시해줌
    for i in charge_list:
        bus_stop[i] = 1


    bus = 0
    cnt = 0
    while True :


        bus += energy

        if bus >= last_busstop:
            break

        if bus_stop[bus] == 0:
            for i in range(bus, bus-energy, -1):
                if bus_stop[i] == 1:
                    bus = i
                    cnt += 1
                    break
            else:
                cnt = 0
                break
            # else구문을 적어주었기 때문에 아래 구문이 필요없어졌다.
            # if bus_stop.index(1) > energy:
            #  cnt = 0
            #   break
        else:
            cnt+=1

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



 

🍦 [복습]

 

# 1. 210218

 

복습완료

 

 

# 2. 210223

 

복습완료... 그치만 여전히 while문은 어색하고 어렵다.

왜 if bus >= N 을 for문 아래로 빼면 오류가 나는걸까?

 

 

# 3. 210307

 

복습완료.

[풀이 2] 만든날.

 

🥩 list 메서드, .index()

a = [1, 2, 3, 1]
a.index(1)
# 1이 존재하는 첫 번째 인덱스를 반환
# 따라서, 0이 출력된다.