Stay Hungry Stay Foolish

SWEA

[SWEA] 6485. 삼성시의 버스 노선 (Python/D3)

dev스카이 2024. 11. 13. 21:16

[문제 링크] 👇

 

SW Expert Academy

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

swexpertacademy.com


풀이 방법

  • 버스 정류장 배열 초기화
    • bus 배열을 초기화하여 각 정류장의 버스 노선 수를 0으로 설정한다.
    • 정류장의 번호는 문제에서 최대 5,000까지 가능하므로 배열의 크기를 5,000으로 지정한다.
  • 노선 정보 입력 및 정류장 누적
    • 각 버스 노선의 시작 정류장 A와 끝 정류장 B가 주어지면, 해당 범위 내 모든 정류장의 값을 1씩 증가시켜, 각 정류장이 포함된 버스 노선의 개수를 누적한다.
  • 특정 정류장 개수 계산
    • 이후에 특정 정류장에 대해 지나가는 버스의 수를 확인하기 위해 P개의 정류장 번호를 입력받고, bus 배열에서 해당 인덱스 값을 result 리스트에 추가한다.
  • 결과 출력
    • 최종적으로 result 리스트에 저장된 값을 테스트 케이스 번호와 함께 출력한다.

Solution

T = int(input())  # 테스트 케이스 수
for test_case in range(1, T + 1):
    N = int(input())
    bus = [0]*5000  # 미리 버스 정류장 개수 만들기
    
    for _ in range(N):
        A, B = map(int, input().split())
        for j in range(A - 1, B):  # A 부터 B 까지의 범위에 해당하는 인덱스 값 누적
            bus[j] += 1
            
    P = int(input())
    result = []
   
    for _ in range(P):
        stop = int(input())
        result.append(bus[stop - 1])  # 입력받은 정류장에 해당하는 인덱스만 리스트에 저장
    print(f"#{test_case}", *result)

 

📌 주의

이 풀이는 작은 입력에서는 문제가 없지만, 범위가 넓은 A와 B 값이 반복되면 시간이 오래 걸릴 수 있다.