• 문제 링크
2980번: 도로와 신호등
상근이는 트럭을 가지고 긴 일직선 도로를 운전하고 있다. 도로에는 신호등이 설치되어 있다. 상근이는 각 신호등에 대해서 빨간 불이 지속되는 시간과 초록 불이 지속되는 시간을 미리 구해왔
www.acmicpc.net
• 풀이 과정
현재 위치(loc) 와 소요 시간(time) 을 나타내는 변수를 0으로 초기화, 이 후 각 신호등의 정보를 n회만큼 입력받는다.
1m 이동에 걸리는 소요 시간이 1초이므로 소요시간에 신호등 위치 - 현재 위치를 더해 시간의 경과를 나타내고,
현재 위치를 신호등의 위치로 갱신한다.
r + g를 신호등의 한 주기로 정의 시 time % (r + g) 은 현재 시간이 신호등의 주기 중 몇 초를 진행 중인지를 나타내며,
이 시간(state) 이 빨간불의 지속 시간보다 짧다면 아직 신호등을 기다리는 중이므로
r -state, 즉 빨간불이 남은 시간을 소요 시간에 더한다.
마지막으로 남은 구간, 도로의 길이 - 현재 위치(l - loc) 를 소요 시간에 더하여 정답이 구해진다.
• 풀이 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int l = Integer.parseInt(st.nextToken());
int loc = 0;
int time = 0;
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
int d = Integer.parseInt(st.nextToken());
int r = Integer.parseInt(st.nextToken());
int g = Integer.parseInt(st.nextToken());
time += d - loc;
loc = d;
int state = time % (r + g);
if (state < r)
time += r - state;
}
time += l - loc;
bw.write(time + "\n");
bw.flush();
}
}
'Problem Solving > Baekjoon' 카테고리의 다른 글
[백준] 13305 주유소 - Greedy / Java (0) | 2022.06.08 |
---|---|
[백준] 1063 킹 - Implementation / Java (0) | 2022.06.07 |
[백준] 8979 올림픽 - Implementation / Java (0) | 2022.06.05 |
[백준] 2563 색종이 - Implementation / Java (0) | 2022.06.03 |
[백준] 3048 개미 - Implementation / Java (0) | 2022.06.02 |
댓글