SWEA 4831. 전기버스 python(파이썬)

Kang HwanSeok·2022년 8월 12일
0

SWEA

목록 보기
4/8
post-thumbnail

문제 간략 설명

버스가 목적지까지 연료를 충전하면서 갈 수 있을까?

문제 포인트

버스의 가동 범위 내 충전소 탐색

알아갈 개념 요약

정말 단순한 리스트 문제.

  • 요점은 버스가 한번 충전해서 이동할 수 있는 거리안에 충전소가 있는지 여부를 확인 가능한가?
    • 탐색을 할 것인지, 갔다가 돌아올 것인지, 방법은 다종 다양
  • 재귀를 통해 구현하겠습니다.

풀이

  • 코드: 가장 먼 범위부터 탐색 후 이동.
    # 4831. 전기버스
    # 문제 설계: 재귀함수로 드라이빙 크쿠루삥뽕
    def driving(current_position, drive_count):
      # driving 함수를 정의합니다.
    	for find in range(fuel, 0, -1):
        # 한번에 이동 가능한 영역을 범위로, 멀리서부터 탐색.
        	if int(current_position + find) >= int(goal):
            # 만약 지금 위치에서 충전없이 한번에 골이면 
            	return print(f'#{case_num} {drive_count}')
                # return print로 답 도출
            elif station_list[current_position + find] == 1:
            # 아니라면, 앞선 범위에서 1을 찾기(충전소 = 1)
            current_position += find
            # 범위 내 가장 멀리 있는 충전소를 찾았으면,
            drive_count += 1
            # 이동 후, 현재 위치 수정 및 충전 횟수 +1
            return driving(current_position,drive_count)
            # 재귀
            return print(f'#{case_num} 0')
            # for문 다 돌아갔는데 return 안났으면,
            # 범위 내에 충전소가 없다는 것이므로, 사고난것.
            
            
            T = int(input())
            for case_num in range(1, T + 1):
            K, N, M = map(int, input().split())
            fuel = K
            goal = N
            station_count = M
            station_list = [0] * (goal + fuel)
            # 당초 N의 길이와 거기에서 K 만큼의 길이까지 더함
            charger_list = list(map(int, input().split()))
            # 충전기의 위치 데이터를 받아서
            for charger in charger_list:
            # 이 데이터를 좌표 삼아 station_list에 저장
            station_list[charger] += 1
            # Station 리스트는, 충전소가 있는 곳에 1을 배치함.
            driving(0, 0)
            # 현재 위치 0, 충전횟수 0회로 driving 함수를 개시
        ```
        
profile
알고리즘을 좋아하는 개발자

0개의 댓글