[백준] 11971 속도 위반

Python
avatar
2025.05.04
·
4 min read

문제

말썽꾸러기 연정이는 오늘도 태우의 자동차를 몰래타고 신나게 도로를 달리는 중이다.

도로는 정확히 100km 이고, 연정이는 무조건 도로의 끝까지 달려야한다.

도로의 각 구간에는 제한속도를 지정해 두었으나 쿨한 연정이는 속도 위반에는 개의치 않아 (더군다나 자신의 차도 아니므로) 자신이 원하는 속도로 달린다.

도로는 N개의 구간으로 나뉘며 각 구간에는 도로 길이와 해당 도로의 제한속도가 주어진다. 

도로 N개의 총 합은 100km 이며 각 구간별 도로 길이와 제한 속도는 모두 양의 정수이다. 예를 들어, N이 3이고 (40, 75), (50, 35), (10, 45) 이라면 

  • 첫 구간의 도로 길이는 40km, 제한속도는 75km/h 

  • 두 번째 구간의 도로 길이는 50km, 제한 속도는 35km/h 

  • 세 번째 구간의 도로 길이는 10km, 제한 속도는 45km/h

연정이가 달린 도로 또한 M 개 구간으로 나뉘며 각 구간에는 도로 길이와 연정이가 달린 속도가 주어진다. 

M 개의 도로 총 합은 100km 이며 각 구간별 도로 길이와 달린 속도는 모두 양의 정수이다. 예를 들어 M 이 3이고 (40, 76), (20, 30), (40, 40) 이라면 

  • 첫 구간에서 연정이가 달린 도로 길이는 40km, 달린 속도는 76km/h

  • 두 번째 구간에서 달린 도로 길이는 20km, 달린 속도는 30km/h

  • 세 번째 구간에서 달린 도로 길이는 40km, 달린 속도는 40km/h

연정이가 100km 도로를 달리는 동안 속도를 위반한 최댓값을 구하시오.


입력

첫 줄에 N과 M이 주어진다. 그 다음 줄부터 N개의 줄은 각 구간의 길이 및 해당 구간에서의 제한 속도가 주어지며, 다음 M개의 줄은 연정이가 달린 각 구간의 길이와 해당 구간에서 달린 속도가 주어진다.


출력

연정이가 도로를 달리는 동안 속도 위반한 최댓값을 출력하시오. 단, 속도 위반을 하지 않았다면 0을 출력하시오.


내 풀이

import sys
input = sys.stdin.readline

n, m = map(int, input().split())

limit = []
for _ in range(n):
    dist, speed = map(int, input().split())
    limit += [speed]*dist
    
yj = []
for _ in range(m):
    dist, speed = map(int, input().split())
    yj += [speed]*dist
    
maxspeeding = 0
i = 0
while i < 100:
    maxspeeding = max(maxspeeding, yj[i] - limit[i])
    i += 1
    
print(maxspeeding)

코멘트

도로가 100km밖에 안되고 구간별 도로 길이와 제한 속도가 모두 양의 정수라고 했으므로 1km 단위로 제한 속도와 실제로 연정이가 달린 속도를 저장한 배열을 만들어서 같은 위치일 때 속도를 비교하도록 구현하면 된다.


References

https://www.acmicpc.net/problem/11971







- 컬렉션 아티클