728x90
1. 문제
상근이는 트럭을 가지고 긴 일직선 도로를 운전하고 있다. 도로에는 신호등이 설치되어 있다.
상근이는 각 신호등에 대해서 빨간 불이 지속되는 시간과 초록 불이 지속되는 시간을 미리 구해왔다. (빨강색과 초록색 불빛은 무한히 반복된다)
상근이의 트럭이 도로에 진입했을 때, 모든 신호등의 색상은 빨간색이고, 사이클이 막 시작한 상태이다.
상근이는 1초에 1미터를 움직인다.
신호등의 색상이 빨간색인 경우에는 그 자리에서 멈추고 초록색으로 바뀔때 까지 기다린다.
상근이가 도로의 끝까지 이동하는데 걸리는 시간을 구하는 프로그램을 작성하시오.
도로의 시작은 0미터이고, 끝은 L미터인 지점이다.
2. 풀이
현재 위치와 시간 변수를 0으로 초기화한다.
신호등을 입력받을 때마다 다음을 반복한다.
- 현재위치가 신호등 위치보다 항상 작으므로, 시간에 신호등 위치-현재위치를 더해준다. 1초에 1m씩 가기 때문이다.
- 현재위치를 D로 재설정한다.
- 시간을 빨간불+파란불 한 사이클로 나누어 그 나머지를 gap에 저장한다.
- gap이 만약 빨간불 길이보다 작다면 아직 빨간불을 기다리는 중이므로 빨간불이 남은 시간만큼 더한다.
신호등을 모두 입력받았다면 도로 끝-현재위치를 시간에 더해준다.
import java.io.*;
import java.util.*;
public class BOJ_2980_도로와신호등 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine());
int N = Integer.parseInt(st.nextToken());
int L = Integer.parseInt(st.nextToken());
int position = 0;
int time = 0;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(in.readLine());
int D = Integer.parseInt(st.nextToken());
int R = Integer.parseInt(st.nextToken());
int G = Integer.parseInt(st.nextToken());
time += D - position;
position = D;
int gap = time% (R + G);
if (gap < R) time += R - gap;
}
time += L-position;
System.out.println(time);
}
}
3. 결과
'코딩테스트 > BOJ' 카테고리의 다른 글
[BOJ] 9663 N-Queen - JAVA (0) | 2022.02.18 |
---|---|
[BOJ] 1992 쿼드트리 - JAVA (0) | 2022.02.16 |
[BOJ] 1074 Z - JAVA (0) | 2022.02.16 |
[BOJ] 10709 기상캐스터 - JAVA (0) | 2022.02.16 |
[BOJ] 2527 직사각형 - JAVA (0) | 2022.02.16 |
댓글