본문 바로가기
알고리즘/SWEA

SWEA D3 6485. 삼성시의 버스 노선 (python)

by 개발하는 호랑이 2024. 2. 27.

삼성시의 버스 노선

풀이

문제 입력이 아주 조금 복잡하긴 한데 자세히 읽으면 금방 무슨 말을 하고자 하는지 이해가 된다.
A1, B1 이렇게 적혀있는 것들은 한 버스 노선이 어디 정류장부터 어디 정류장까지 가는지에 대한 정보를 주는 것이다.
그리고 C들은 정류장 번호이다.

나는 머릿속의 복잡함을 최소화하고자, 일단 각 리스트를 만들고 이를 리스트에 넣은 뒤에 정리하는 방식으로 했지만, 그렇게 하지 않더라도 풀 수 있는 방법이 충분히 있을 거라고 생각된다.

우선 나는 시작 정류장, 도착 정류장, 확인 정류장을 각 리스트를 생성하고, 이후 이를 이용하는 방식을 사용했다.
또한 5000개의 정류장이므로, 1~5000번을 이용하기 위해, bus_stop = [0] * 5001로서 변수를 생성하였다.

위처럼 변수 초기 설정을 다해주고 난 후에 각 버스가 몇 번 정류장을 지나는지 다 확인하게 만드는 방식을 사용했다.

더 좋고 빠른 방식도 분명히 생각나지만, 여기선 내가 빠르게 문제를 푸는 방식을 택했고, 통과했다.

T = int(input())
for testcase in range(1,T+1):
    N = int(input())
    A_list = []
    B_list = []
    for _ in range(N):
        A, B = map(int, input().split())
        A_list.append(A)
        B_list.append(B)
    P = int(input())
    C_list = []
    for _ in range(P):
        C = int(input())
        C_list.append(C)
    
    # 버스정류장 0번~ P번 # 사용은 1번~P번
    bus_stop = [0]*(5000+1)
    for i in range(N):
        # 출발지부터 도착지까지
        for j in range(A_list[i], B_list[i]+1):
            bus_stop[j] += 1
    
    # C는 버스 정류장번호, 각 정류장에 몇개의 버스 노선이 다니냐?
    # 버스는 A0~ B0, A1~B1, ... 으로 다님
    
    print(f'#{testcase}', end=' ')
    for stop in C_list:
        print(bus_stop[stop], end=' ')
    print()