본문 바로가기
SSAFY

[swea 파이썬] 6485. 삼성시의 버스 노선

by 주니코니 2024. 8. 18.

 

 

SW Expert Academy

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

swexpertacademy.com

 

아래를 간과해서 런타임 에러가 나버렸다

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

 

난 처음에 busstop = [0] * (P + 1)으로 했다. 0번 인덱스를 제외하고 사용하면 되니까..

(즉, 만약 버스 정류장 번호가 300,400,200 일 수도 있는데 P+1로 해두면, 버스 번호 반영을 할 수가 없다! 무조건 버스정류장 번호 1번부터라 인지함..)

 

런타임 에러 코드 : 

import sys
sys.stdin = open('s_input.txt')
T = int(input())
for tc in range(1,T+1):
    N = int(input())
    bus_route = []
    for i in range(N):
        (a,b)= map(int,input().split())
        bus_route.append((a,b))

    P = int(input())
    for i in range(P):
        p = int(input())
    busstop = [0] * (P + 1) #-->> 타임에러!! 
    
    for start,end in bus_route:
        for i in range(start,end+1):
            busstop[i] += 1
            
    busstop = busstop[1:]
    print(f'#{tc}', *busstop)

 

고친 코드 : 

    busstop = [0] * (5000 + 1)

    busstop_idx = [int(input()) for _ in range(P)] #정류장 인덱스 살리기

T = int(input())
for tc in range(1,T+1):
    N = int(input())
    bus_route = []
    for i in range(N):
        (a,b)= map(int,input().split())
        bus_route.append((a,b))

    P = int(input())
    #for i in range(P):
    #    p = int(input())
        
    #버스 정류장이 1~5000개 있으므로
    busstop = [0] * (5000 + 1)
    busstop_idx = [int(input()) for _ in range(P)] #정류장 인덱스 살리기
    
    #인덱스 벗어나서 참조 에러
    #bus_route의 (a,b)값은 1~5000사이의 값을 갖고 있으나, busstop의 인덱스 최대값은 P임
    for start,end in bus_route:
        for i in range(start,end+1):
            busstop[i] += 1
            
    #busstop = busstop[1:]
    #입력받은 P개의 bus정류장만 출력
    print(f'#{tc}', *[busstop[i] for i in busstop_idx])

 

만약 [0] * P 를 살리고 싶다면? 

    bus_cnt = [0]*P 

T = int(input())
for tc in range(1,T+1):
    N = int(input())
    bus_route = []
    for i in range(N):
        (a,b)= map(int,input().split())
        bus_route.append((a,b))

    P = int(input())


    busstop = [int(input()) for _ in range(P)]
    bus_cnt = [0]*P  
    
    #인덱스 오류
    #bus_route의 (a,b)값은 1~5000사이의 값을 갖고 있으나, busstop의 인덱스 최대값은 P임
    for start,end in bus_route:
        for i, stop in enumerate(busstop) :
            if start <= stop <= end : 
                bus_cnt[i] += 1
            

    print(f'#{tc}', *bus_cnt)

 

위 내용을 딕셔너리로 아래와 같이 하나로 표현 할 수도 있는데,

테스트 케이스 중에 버스 정류장 값이 중복된 값도 있나봄 fail뜸

 

이 것을 딕셔너리로 아래와 같이 하나로 표현 할 수도 있는데, 테스트 케이스 중에 버스 정류장 값이 중복된 값도 있나봄 fail뜸
busstop ={int(input()):0 for _ in range(P)}

    for start,end in bus_route:
        for stop in busstop:
            if start <= stop <= end : 
                busstop[stop] += 1
            

    print(f'#{tc}', *busstop.values())

 

 

여러가지 문법이 있다니 신기하다

날 힘들게 한 문제..힁