티스토리 뷰

반응형

문제의 저작권은 SW Expert Academy에 있습니다.

 

 

처음 python을 배우신 분들이 이해하기 쉽도록 풀이를 적었습니다.

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
TC = int(input())
for tc in range(1, TC+1):
    K, N, M = map(int, input().split())
    data = list(map(int, input().split())) + [N+K, N+K]
    #N 종점 K 이동가능 M 정류장 개수
    here = 0 #내위치
    i = 0 #정류장위치
    cnt = 0 #기름 넣을때 마다 +1
    while here + K < N :
       if here+>=  data[i+2]:
           here = data[i + 2]
           cnt += 1
           i += 3
           continue
 
       elif here+>=  data[i+1]:
           here = data[i + 1]
           cnt += 1
           i += 2
           continue
       elif here+< data[i]:
           cnt = 0
           break
 
       else:
           here = data[i]
           cnt += 1
           i += 1
 
    print("#%d %d"%(tc, cnt))
 
 
cs
 
 
 

 

처음 풀 땐 굉장히 어렵게 느껴졌던 문제. 초반에 풀이를 찾아봤지만, 이해가 안되서 최대한 쉽게 풀어썼다.

 

 

해설

기본적인 풀이는 내 현재위치에서 더한 값을 다음에 갈 주유소의 위치와 비교하면서 풀었다

 

 

혹시나 break 모르는 사람이 있을 수 있으니 간단히 설명하면

break를 만나면 조건문이 아닌 반복문을 그만하고 다음 으로 간다. 위의 경우는 while문을 나온다

continue를 만나면 반복문 안에서 그 다음부분을 안하고, 다시 반복문 위로 올라간다.

 

while here + K < N :

버스의 현재위치(here)와 이동가능한 수(K)의 합이 마지막 정류장을 넘긴다면 while을 멈춘다.

 

if here+>=  data[i+2]:

원래는 이부분 빼고 제출했는데 testcase가 10개중 8개만 맞아서 추가 한 내용.

현재의 버스 위치에서 다음다음다음 주유소로 갈 수있는 경우를 추가 한 것이다.

(사실 완전검색하려면 for문 추가... 해야 하지만 초보자들은 아직 몰라도 된다)

 

elif here+>=  data[i+1]: 

/현재 버스의 위치가 다음 다음 주유소에 갈 수 있으면

here = data[i + 1

/버스의 위치를 다음 다음 정류소로 바꾸고

cnt += 1            바꾸고정류소 들린 횟수를 +1하고 i에도 +2를 한다

 

elif here+< data[i]:

다음 정류장까지 못가면 break

 

else:

그외의 정상적으로 다음정류장으로 가는 부분을 이렇게 적었다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함