코테/백준
[백준/JAVA] 2980번: 도로와 신호등
imname1am
2023. 6. 22. 21:57
반응형
🔺 문제
2980번: 도로와 신호등
상근이는 트럭을 가지고 긴 일직선 도로를 운전하고 있다. 도로에는 신호등이 설치되어 있다. 상근이는 각 신호등에 대해서 빨간 불이 지속되는 시간과 초록 불이 지속되는 시간을 미리 구해왔
www.acmicpc.net
🔺 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken()); // 신호등 개수
int L = Integer.parseInt(st.nextToken()); // 도로 길이
int position = 0; // 현재 위치
int time = 0; // 시간 변수
while(L --> 0) {
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 - position; // 🔔 시간 += 신호등 위치 - 현재 위치 🔔
position = D; // 현재 위치를 D로 재설정
int section = time % (R + G); // 🔔 한 사이클로 나눠 구간 파악 🔔
if(section < R) // 📍 빨간불 구간 📍
time += R - section; // 빨간불이 남은 시간만큼 더함
}
time += L - position; // 도로 끝 - 현재 위치를 시간에 더함
System.out.println(time);
}
}
|
cs |
✅ 해결 아이디어
- (Line 22)시간 += 신호등 위치 - 현재 위치
(∵ 현재 위치가 신호등 위치보다 항상 작으므로)
- (Line 25)총 시간 % (빨간불 + 초록불)
: 현재 신호등이 빨간불 or 파란불인지 구간 파악 가능
- (Line 26, 27) 구간을 section 이라고 했을 때, 빨간불 지속 기간보다 작으면, 빨간 구간
- (Line 30) 기다리는 시간을 더하고, 다음 위치로 이동할 때 이동 거리만큼 총 시간에 더함.
💥 유의사항
• 구간 나눠서 얘가 빨간불 구간인지, 파란불 구간인지 확인하고, 그에 따라 시간 조절
🔺 다른 풀이들
다들 비슷하심...
💬 느낀 점
흠...... 실버부터 이렇게 막히기냐고,,,
많이 풀면.. 늘겠지여..?
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
[BOJ] 백준 [2980] 도로와 신호등 JAVA
https://www.acmicpc.net/problem/2980 2980번: 도로와 신호등 상근이는 트럭을 가지고 긴 일직선 도로를 운전하고 있다. 도로에는 신호등이 설치되어 있다. 상근이는 각 신호등에 대해서 빨간 불이 지속되
katastrophe.tistory.com
[BOJ] 2980 도로와 신호등 - JAVA
1. 문제 2980번: 도로와 신호등 상근이는 트럭을 가지고 긴 일직선 도로를 운전하고 있다. 도로에는 신호등이 설치되어 있다. 상근이는 각 신호등에 대해서 빨간 불이 지속되는 시간과 초록 불이
january-diary.tistory.com
반응형