Koala - 2기/B반

[백준 2980] 도로와 신호등

최이월 2021. 2. 8. 22:15

www.acmicpc.net/problem/2980

 

2980번: 도로와 신호등

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

www.acmicpc.net

전체 코드

더보기
#include <iostream>
#include <map>

using namespace std;

int n, l;

map<int, pair<int, int>> mp;

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

	cin >> n >> l;

	for (int i = 0; i < n; i++) {
		int d, r, g;
		cin >> d >> r >> g;

		mp[d] = make_pair(r, g);
	}

	int distance = 0;
	int time = 0;

	while (1) {
		if (distance == l) break;

		if (mp.count(distance) > 0) {// 신호등이 있을 때
			// 신호등의 주기
			int cycle = mp[distance].first + mp[distance].second;

			// 신호등의 빨간불 지속시간 - (현재시간 % 해당 신호등의 주기)
			int temp = mp[distance].first - (time % cycle);

			if (temp <= 0) { // 초록불
				distance++;
				time++;
			}
			else {// 빨간불, 대기시간 더해주기
				time += temp;
			}
			continue;
		}
		distance++;
		time++;
	}
	
	cout << time << "\n";

	return 0;
}