본문 바로가기
백준 알고리즘

파이썬) 백준 알고리즘 | 11971번 : 속도 위반

by 코딩새내기_ 2022. 2. 3.

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

 

11971번: 속도 위반

예를 들어 도로가 3구역 [(40km, 75km/h), (50km, 35km/h), (10km, 45km/h)] 이고. 연정이가 달린 3구역 [(40km, 76km/h), (20km, 30km/h), (40km, 40km/h)] 이라면, 처음 0 ~ 40km 영역에서 1km/h 만큼 위반했으나 60km ~ 90km 사이에

www.acmicpc.net

문제

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

도로는 정확히 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을 출력하시오.

백준 11971 '속도 위반' 문제입니다.

100개의 배열을 만들어서 각각 값을 대입해줬습니다.

import sys

N, M = map(int, sys.stdin.readline().split())
rule = []
yeon = []
a = 0
for i in range(N):
    b, c = list(map(int, sys.stdin.readline().split()))
    a += b
    rule.append([a,c])
a = 0
for i in range(M):
    b, c = list(map(int, sys.stdin.readline().split()))
    a += b
    yeon.append([a,c])

diff_rule = [0] * 100
diff_yeon = [0] * 100

for i in range(100):
    for j in range(len(rule)):
        if i < rule[-j-1][0]:
            diff_rule[i] = rule[-j-1][1]
    for j in range(len(yeon)):
        if i < yeon[-j-1][0]:
            diff_yeon[i] = yeon[-j-1][1]

max = 0
for i in range(100):
    if max < diff_yeon[i] - diff_rule[i]:
        max = diff_yeon[i] - diff_rule[i]
print(max)

댓글