-
백준 2980번 도로와 신호등 :: 마이구미알고리즘 풀이/수학 2017. 12. 17. 12:59반응형
이 글은 백준 알고리즘 문제 2890번 "도로와 신호등" 을 풀이한다.
시뮬레이션 문제로써, 시나리오를 정확히 이해한 후 그대로 구현하면 된다.
상근이는 트럭을 가지고 긴 일직선 도로를 운전하고 있다. 도로에는 신호등이 설치되어 있다. 상근이는 각 신호등에 대해서 빨간 불이 지속되는 시간과 초록 불이 지속되는 시간을 미리 구해왔다. (빨강색과 초록색 불빛은 무한히 반복된다)
상근이의 트럭이 도로에 진입했을 때, 모든 신호등의 색상은 빨간색이고, 사이클이 막 시작한 상태이다. 상근이는 1초에 1미터를 움직인다. 신호등의 색상이 빨간색인 경우에는 그 자리에서 멈추고 초록색으로 바뀔때 까지 기다린다.
상근이가 도로의 끝까지 이동하는데 걸리는 시간을 구하는 프로그램을 작성하시오. 도로의 시작은 0미터이고, 끝은 L미터인 지점이다.
본인의 경우에는 주어지는 각 신호등은 흐르는 시간에 비례한다고 가정하고 접근했다.
각 신호등을 0미터에서 출발했을 때, 지속시간을 통해 어떤 색인지를 판단했다.
// j = 시간 while (j <= d + g) { for (int k = 0; k < r; k++) { temp[j++] = 0; } for (int k = 0; k < g; k++) { temp[j++] = 1; } }
하지만 빨간불로 인해 대기시간에 따라 다음에 위치하는 신호등에 영향을 미친다는 것이다.
이것이 의미하는 것은, 각 신호등은 흐르는 시간에 비례하지 않는다는 것이다.
이전 신호등에서 빨간불로 인해 대기하는 시간을 고려해야한다는 것이다.
예를 들면, 다음과 같이 주어졌을 경우를 보자.
2 10
3 5 5
5 2 2
위치가 3인 신호등은 빨간불이 5초간 지속된다.
이것이 의미하는 것은 2초의 대기시간이 존재한다.
다음 신호등은 2초의 대기시간을 고려해야한다.
결론적으로 도달하는 것은 각 신호등에 도착하는 시간을 구하는 것이다.
신호등에 도착한 시간 % ( 빨간불 + 초록불 ) 의 값이 빨간불보다 작거나 같으면 빨간불, 크다면 초록불이라는 것을 알 수 있다.
이 값을 이용하면 각 신호등에 도착하는 시간을 구할 수 있다.
1234567891011121314151617181920212223private void solve() {int n = sc.nextInt();int l = sc.nextInt();int t = 0;int pre = 0;for (int i = 0; i < n; i++) {int d = sc.nextInt();int r = sc.nextInt();int g = sc.nextInt();// t - 위치 d에 있는 신호등까지 걸린 시간t += d - pre;pre = d;int red = t % (r + g);if (red <= r) {// 빨간 불이 끝날때까지 대기t += r - red;}}System.out.println(t + (l - pre));}cs 반응형'알고리즘 풀이 > 수학' 카테고리의 다른 글
백준 2477번 참외밭 :: 마이구미 (0) 2017.12.28 백준 10800번 컬러볼 :: 마이구미 (2) 2017.12.21 백준 2512번 예산 :: 마이구미 (0) 2017.12.17 백준 5623번 수열의 합 :: 마이구미 (0) 2017.12.05 백준 6378번 디지털 루트 :: 마이구미 (0) 2017.11.12