충전기가 있는 곳에서 다음 충전기까지의 거리와 연료랑을 검토하는 코드
# 노선 T
t = int(input())
# 노선 t만큼 반복
for idx in range(1, t+1):
# 정류장 수 k, 종점 n, 충전기 설치된 곳의 수 m
k, n, m = map(int, input().split())
# 충전기가 설치된 곳
charger = list(map(int, input().split()))
now = 0 # 현재 위치
battery = k # 배터리 상태
next_c = 1 # 다음 충전기 설치 된 곳의 idx
answer = 0 # 최소 충전 횟수
# 목표지점 전까지 반복
# 목표지점에서는 배터리 0이어도 상관 X이므로
while now < n-1:
now += 1 # 위치 이동
battery -= 1 # 배터리 감소
# 만약 현재 지점이 충전기가 설치된 곳이라면
if now in charger:
# 다음 충전기까지 배터리가 부족하다면,
# 또는 현재 충전기가 마지막인경우, 남은 거리가 남은 배터리보다 많다면 충전
if charger[next_c]-now > battery or (next_c == m-1 and n-now > battery):
battery = k
answer += 1
# 다음 충전기 설치된 곳의 idx 변경
if next_c < m-1:
next_c += 1
# print('now=', now, 'battery=', battery, 'answer=', answer, 'next_c=', next_c)
# 목표 도달하지 못했는데 배터리가 없는 경우 0 반환하고 중단.
if not battery:
answer = 0
break
print('#{} {}'.format(idx, answer))
위의 코드는 테스트케이스를 다 통과하지만 3 11 5 / 1 3 4 7 8 이 반례를 통과하지 못한다.
그래서 마지막 정류장을 반드시 표시해주어야한다.
근데 그럼 인덱스 에러가 나니까, try except문을 사용한다.
# 노선 T
t = int(input())
# 노선 t만큼 반복
for idx in range(1, t + 1):
# 정류장 수 k, 종점 n, 충전기 설치된 곳의 수 m
k, n, m = map(int, input().split())
# 충전기가 설치된 곳
charger = list(map(int, input().split()))
now = 0 # 현재 위치
battery = k # 배터리 상태
next_c = 0 # 다음 충전기 설치 된 곳의 idx
answer = 0 # 최소 충전 횟수
# 목표지점 전까지 반복
# 목표지점에서는 배터리 0이어도 상관 X이므로
while now < n - 1:
now += 1 # 위치 이동
battery -= 1 # 배터리 감소
# 만약 현재 지점이 충전기가 설치된 곳이라면
if now in charger:
# 다음 충전기 설치된 곳의 idx 변경
if next_c != m:
next_c += 1
# 다음 충전기까지 배터리가 부족하다면,
try:
if charger[next_c] - now > battery:
battery = k
answer += 1
# 또는 현재 충전기가 마지막인경우, 남은 거리가 남은 배터리보다 많다면 충전
except:
if next_c == m and n - now > battery:
battery = k
answer += 1
# print('now=', now, 'battery=', battery, 'answer=', answer, 'next_c=', next_c)
# 목표 도달하지 못했는데 배터리가 없는 경우 0 반환하고 중단.
if not battery:
answer = 0
break
* 다른 팀원의 코드 - 기름이 다 닳은 시점에서 그 전에 충전기가 있었는지 검사
n = int(input())
for k in range(1, n+1):
# K = 한번충전으로 이동가능한 정류장수 , N = 종점, M = 충정기정류장 수
K, N, M = map(int, input().split())
charge_idx = list(map(int, input().split()))
charge = [0 for i in range(N+1)] # 종점까지 충전소 세팅하기 0없음, 1있음
for i in charge_idx:
charge[i] = 1
cnt = 0
fuel = K + 1 # for문 처음 시작할때 -1 하므로
for i in range(N + 1): # 버스 출발!
if i == N: # 도착하면 끝 아무것도 하지마
break
fuel -= 1
# print(fuel)
if fuel == 0: # 기름이 다닳은 시점에서 그전 K안에 정류장이 있었나 검사.
temp =0 # 다 닳은 시점에서 몇정거장 전에 충전소 있었는지
for j in range(i, i-(K+1), -1):
if temp == K:
cnt = 0
break
if charge[j] == 1:
fuel = K - temp # 현위치에서 남은 연료량
cnt += 1 # 충전횟수 + 1
break
else:
temp += 1 # for문 돌면서
print('#{} {}'.format(k, cnt))
'Algorithm > SW Expert Academy' 카테고리의 다른 글
[Python] 1209. sum (0) | 2021.08.11 |
---|---|
[Python] 1208. Flatten (0) | 2021.08.11 |
[Python] 4835. 구간합 (0) | 2021.08.10 |
[Python] 4834. 숫자 카드 (0) | 2021.08.10 |
[Python] 4828. min max (0) | 2021.08.10 |