알고리즘/SWEA

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

개발하는 호랑이 2024. 2. 27. 16:20

삼성시의 버스 노선

풀이

문제 입력이 아주 조금 복잡하긴 한데 자세히 읽으면 금방 무슨 말을 하고자 하는지 이해가 된다.
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()