티스토리 뷰
문제 링크 : https://www.acmicpc.net/problem/2980
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, L;
cin >> N >> L;
int cur = 0, prev = 0;
while(N--)
{
int D, R, G;
cin >> D >> R >> G;
cur += (D-prev);
int tmp = R+G;
if(cur % tmp < R) cur += (R-cur%tmp);
prev = D;
}
cur += (L-prev);
cout << cur;
return 0;
}
기본적으로는 신호등 간의 거리를 계산해 누적하며 더해준다.
이때 빨간불 + 초록불의 한 사이클을 파악하여, 해당 사이클 내에 빨간 불이 걸리는 지 아닌지를 체크해 대기 시간을 추가로 더한다.
마지막 신호등에서 끝 거리까지의 차이를 구해 남은 거리를 추가로 더해준다.
'Problem Solving > 백준' 카테고리의 다른 글
| [백준 11502번] 세 개의 소수 문제 (C++) (0) | 2025.06.26 |
|---|---|
| [백준 24039번] 2021은 무엇이 특별할까? (0) | 2025.06.24 |
| [백준 19539번] 사과나무 (C++) (0) | 2025.06.22 |
| [백준 15965번] K번째 소수 (C++) (0) | 2025.06.22 |
| [백준 1500번] 최대 곱 (C++) (0) | 2025.06.21 |