문제 확인
- 사이트를 방문하여 문제를 확인해주세요.
나의 풀이
구간 마다 조건을 나눠서 푸는 방법도 생각해봤지만
각 위치에서의 속도 정보를 저장해서 비교했다. 이 방법이 더 편하고 실수할 일도 없을 거 같아서 선택했다.
import sys
n, m = map(int, input().split())
# 제한 구간 정보
section_limit = [list(map(int, input().split())) for _ in range(n)]
# 테스트 구간 정보
section_test = [list(map(int, input().split())) for _ in range(m)]
# 제한 구간 정보 입력
speed_limit = []
for l, s in section_limit:
speed_limit = speed_limit + [s for _ in range(l)]
# 테스트 구간 정보 입력
speed_test = []
for l, s in section_test:
speed_test = speed_test + [s for _ in range(l)]
result = max([speed_test[i] - speed_limit[i] for i in range(100)])
# 전부 속도를 지켰을 경우 음수니까 0 return
print(result if result >= 0 else 0)
다른 사람 풀이
구간 사이 차이에 따라서 조건을 나눠서 풀었다.
import sys
N, M = map(int, sys.stdin.readline().split())
N_section = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]
M_section = [list(map(int, sys.stdin.readline().split())) for _ in range(M)]
total = 0
max_diff = []
while True:
if N_section == [] or M_section == []:
break
diff_length = M_section[0][0] - N_section[0][0] # 구간 길이 차이
if diff_length > 0: # 구간 길이 차가 양수일 때
max_diff.append(M_section[0][1] - N_section[0][1])
N_section.pop(0)
M_section[0][0] = diff_length # M_section[0][0] 은 두 길이의 차이값이 된다
elif diff_length < 0: # 구간 길이 차가 음수일 때
max_diff.append(M_section[0][1] - N_section[0][1])
M_section.pop(0)
N_section[0][0] = -diff_length # N_section[0][0] 은 두 길이의 차이값에 -가 붙은 값이 된다. (음수형태로 나오므로)
else: # 구간 길이 차 = 0
max_diff.append(M_section[0][1] - N_section[0][1])
M_section.pop(0)
N_section.pop(0)
if max(max_diff) >= 0:
print(max(max_diff))
else: # 음수 값들만 있다면 전부 다 제한 속도를 넘지 않은 것이므로 0 출력
print(0)