https://www.acmicpc.net/problem/2980
https://github.com/stellaluminary/Baekjoon
수학적으로 신호등에 위치한 지점에서의 red time과 green time을 합한 값의 나머지가 red time보다 커야만 매끄럽게 이어갈 수 있습니다.
만약 그렇지 못하다면 빨간색 시간에서 남은 시간만큼을 추가 시간으로 더해줘야 합니다.
n, l = map(int, input().split())
tl = []
for _ in range(n):
loc, r, g = map(int, input().split())
tl.append([loc, r, g])
tl.append([l,0,0])
time = tl[0][0]
for i in range(n):
interval = time % (tl[i][1] + tl[i][2])
if interval < tl[i][1]:
time += tl[i][1] - interval
time += tl[i+1][0] - tl[i][0]
print(time)
방법 1을 더 간소화한 버전입니다.
n, l = map(int, input().split())
loc, time = 0, 0
for _ in range(n):
c, r, g = map(int, input().split())
time += c - loc
loc = c
if time % (r+g) < r:
time += (r - time % (r+g))
time += l-loc
print(time)