알고리즘 문제풀이/백준

[백준/BOJ] 2980번 도로와 신호등 (C++)

노력의천재 2021. 9. 19. 02:10

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

 

2980번: 도로와 신호등

상근이는 트럭을 가지고 긴 일직선 도로를 운전하고 있다. 도로에는 신호등이 설치되어 있다. 상근이는 각 신호등에 대해서 빨간 불이 지속되는 시간과 초록 불이 지속되는 시간을 미리 구해왔

www.acmicpc.net

현재 시간에서 빨간불이 지속되는 시간 + 파란불이 지속되는 시간을 나눈 나머지가 빨간불이 지속되는 시간보다 작다면 두 값을 빼줘서 시간에 더해줘야 한다. (이것이 빨간불을 기다리는 시간) 그외의 경우는 기다리지 않고 지나갈 수 있으므로 시간을 1씩 더해준다.

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	int N, L, time = 1;
	cin >> N >> L;
	vector<vector<int> > v(N, vector<int>(3));
	for(int i = 0; i < N; i++) {
		cin>> v[i][0] >> v[i][1] >> v[i][2];
	}

	for(int i = 1; i <= L; i++) {
		for(int j = 0; j < N; j++) {
			if(i == v[j][0] && v[j][1] > time % (v[j][1] + v[j][2])) {
				time += v[j][1] - time % (v[j][1] + v[j][2]);
			}
		}
		time++;
	}
	
	cout << time - 1;
}