티스토리 뷰

코딩공부

[SWEA] sw expert academy - 4831

별의 별 2021. 7. 16. 17:31

[SWEA] sw expert academy - 4831 - 전기버스


https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do

 

SW Expert Academy

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

swexpertacademy.com

 

문제는 위의 링크로 가면 볼 수 있습니다.

K = 한 번 충전으로 최대 이동수 ,  N =정류장 종점 ,  M =충전기가 설치된 정류장 번호

 

T = int(input())
for test_case in range(1, T + 1):
    k,n,m = map(int, input().split())
    num = list(map(int, input().split()))
    
    charge = [0]*(n+1)   // 충전소 배열 만들기

    for i in num        //충전소가 있는 곳에 1
        charge[i] = 1
        
    now = k     // 현재 버스 위치
    back = 치   // 충전 후 이동 할 수 있는 최대 수
    count = 0
      
    while True:            
        if now >= n:              //현재 위치가 종점 이상이면 종료
            result = count
            break
        elif charge[now] == 1    // 현재 위치에 충전소가 있다면 
            back = k             // 있으면 뒤로 안가도 되니까 다시 원상복귀
            count += 1           // 충전소 몇번 들리는지 체크
            now += k    
        elif charge[now] == 0:   // 현재 위치에 충전소가 없다면
            now -= 1             // 현재 위치에서 back
            back -= 1            // 이동할 수 있는 거리 줄이기
            if back == 0:        // 만약 이동거리가 0 즉 이동 불가면 종료
                result = 0
                break	
       
    print(f'#{test_case} {result}')

 

문제를 이해하고 구현하는데 상당히 어려운 문제다.

일단 이해는 해도 바로 코드를 만들기가 어려워서 다른 사람들의 코드를 참고했다.

거기서 가장 쉽고 직관적인 코드를 약간 변형을 했다.

댓글