본문 바로가기

SW expert academy

6485. 삼성시의 버스 노선

출처

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

 

SW Expert Academy

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

swexpertacademy.com

삼성시에 있는 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
2 5
5
1
2
3
4
5
//테스트 케이스 개수
//첫 번째 테스트 케이스, N=2
// A1 = 1, B1 = 3
// A2 = 2, B2 = 5
// P = 5
// 이하 C1 = 1, C2 = 2, C3 = 3, C4 = 4, C5 = 5



 

출력

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

문제풀이 

 

예를 들어

A, B 값으로 1, 3이 입력되면 1,2,3 을 지나고

2, 5 가 입력 될 시  2,3,4,5 로

2 와 3 은 총 2번씩 지날 수 있는 것이다. 

P 는 입력되는 정류장의 개수이고 P의 개수만큼 정류장 번호가 입력되면 그 정류장을 몇번 지나는지

출력해내는 문제로 이해했다.

 

처음엔 딕셔너리에 키 값을 정류장번호(1부터 5000) 로 두고 value값을 0으로 초기화 해둔 후

정류장별로 value 값에 1씩 더해주면 될 것 같아서 

딕셔너리를 이용해서 풀었는데 

결과값은 맞게 나오고 이상이 없는거 같은데 자꾸 런타임 에러가 떠서

코드를 수정했다. 굳이 딕셔너리까지 이용 할 필요는 없겠더라 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
= int(input())
 
for test_case in range(T):
    n = int(input())
 
    bus = [0 for i in range(5000)] #정류장이 5000개까지 있어서 0으로 초기화 해줌
 
    for i in range(n):
        a, b = map(int,input().split())
        for i in range(a,b+1): #a부터 b까지 정류장이 있으면 1씩 더해줌
            bus[i-1]+=1
 
    p = int(input())
    result_arr = [] #결과 값을 담는 리스트를 하나 만들고
    for i in range(p):
        result = int(input())
        result_arr.append(bus[result-1]) #정류장별 결과값을 리스트에 넣어줌
 
    print('#{}'.format(test_case+1), *result_arr) #출력