코테/백준

[백준/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

 

반응형