본문 바로가기

코딩 테스트/SW 아카데미

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

출처

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWczm7QaACgDFAWn&categoryId=AWczm7QaACgDFAWn&categoryType=CODE

문제

삼성시에 있는 5,000개의 버스 정류장은 관리의 편의를 위해 1에서 5,000까지 번호가 붙어 있다.

그리고 버스 노선은 N개가 있는데, i번째 버스 노선은 번호가 Ai이상이고,

Bi이하인 모든 정류장만을 다니는 버스 노선이다.

P개의 버스 정류장에 대해 각 정류장에 몇 개의 버스 노선이 다니는지 구하는 프로그램을 작성하라.

입력

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 하나의 정수 N ( 1 ≤ N ≤ 500 )이 주어진다.

다음 N개의 줄의 i번째 줄에는 두 정수 Ai, Bi ( 1 ≤ Ai ≤ Bi ≤ 5,000 )가 공백 하나로 구분되어 주어진다.

다음 줄에는 하나의 정수 P ( 1 ≤ P ≤ 500 )가 주어진다.

다음 P개의 줄의 j번째 줄에는 하나의 정수 Cj ( 1 ≤ Cj ≤ 5,000 ) 가 주어진다.

출력

각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고 한 칸을 띄운 후,

한 줄에 P개의 정수를 공백 하나로 구분하여 출력한다.

j번째 정수는 Cj번 버스 정류장을 지나는 버스 노선의 개수여야 한다.

 

[입력]

1     // 테스트 케이스 개수
2     // 첫 번째 테스트 케이스 
1 3  // A1 = 1, B1 = 3
2 5  // A2 = 2, B2 = 5
5    // P = 5
1    // 이하 C1 = 1, C2 = 2, C3 = 3, C4 = 4, C5 = 5
2
3
4
5                                                                                         

 

[출력]

# 1 1 2 2 1 1 // 첫 번째 테스트 케이스 결과

풀이

버스 노선이 주어지고 정차하는 버스 정류장의 개수만 계산하면 되는 문제라고 생각했다. 버스 정류장의 개수를 계산하기 위해 딕셔너리를 사용하기로 결정함. 
버스 노선 수 만큼 반복문을 돌며 주어진 버스노선을 key 값으로 하여 value값에 1식 증가시킴으로서 정류장의 개수를 구할 수 있었다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
= int(input()) 
for t in range(T):
    N = int(input())  
    dic = {}
 
    for i in range(1,5001): # 딕셔너리 1~5000까지 0으로 초기화 
        dic[i] = 0
 
    for i in range(N): # 딕셔너리에 way 범위에 해당되는 value값 1씩 늘리기
        start, end = map(int,input().split())
        for j in range(start,end+1):
            dic[j] += 1
 
    P = int(input())
    result = []   
 
    for i in range(P): # result 리스트에 해당 정류장에 맞는 value값 저장
        result.append(dic[int(input())])
 
    print(f'#{t+1}'*result)