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

 

SW Expert Academy

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

swexpertacademy.com

1. 문제 설명

삼성시에 있는 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번 버스 정류장을 지나는 버스 노선의 개수여야 한다.

2. 코드

처음에는 리스트를 활용하여 결과를 만들었는데 몇개의 테스트 케이스를 통과하지 못하였습니다. 문제가 살짝 애매한게 있었지만 C로 들어오는 정류장이 같은 정류장 번호가 들어올 수도 있다고 생각되어 코드를 갈았습니다...

결론적으로 딕셔너리로 수정하여 값을 불러오는 식으로 하니 그 부분을 해결할 수 있었습니다.

 

아래가 작성한 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
= int(input())
for t in range(1, T+1):
    N = int(input())
    # 결과를 저장할 딕셔너리 생성
    result_dict = {}
    for n in range(N):
        A, B = list(map(int, input().split()))
        # 노선 정보를 받아서 지나는 정류장의 count를 하나씩 증가
        for m in range(A, B+1):
            result_dict[m] = result_dict.get(m, 0+ 1
    P = int(input())
    C = []
    for c in range(P):
        C.append(int(input()))
  
    print('#{}'.format(t), end = ' ')
    
    # 출력을 원하는 정류장의 count를 딕셔너리에 가져옴
    # 딕셔너리에 없을 경우 0을 출력
    for x in C:
        if x in result_dict:
            print(result_dict[x], end =' ')
        else:
            print('0', end = ' ')
    print()
 

+ Recent posts