-
BOJ) 도로와 신호등알고리즘/백준 2020. 6. 10. 15:42반응형
도로와 신호등
풀이
특별한 알고리즘 없이 구현으로 풀어냈다.
먼저 1초에 1m씩 움직이기 때문에 기본적으로 K초를 이동해야 한다.
이후에 신호등 정보들이 들어오면, 신호등이 빨간불인 경우에 대기하는 시간도 더해주어야 한다.
문제 조건이 처음 시작이 모두 빨간불이기 때문에, 구해주는 식은 쉬웠다.
신호등마다 대기시간을 담는 waitTime을 선언해줘서, 해당 신호등에 도착하는 시간을 구해줬다.
그리고, 도착 시간에 신호등 색을 구분해주었다.
(도착시간 %=(R+G) 는 신호등의 어떤 차례에 도착했는지를 쉽게 판별하기 위해 해주었다.)
빨간불 지속시간 - 도착시간을 통해 빨간불, 초록불 여부를 구해주었다.
위의 값이 0보다 큰 값이라면 빨간불 지속시간이 다 소진되기 전에 들어온 것이기 때문에, 해당 값 만큼 대기시간을 늘려주었다.
로직
1. 도로의 총 길이 K를 먼저 이동 시간으로 선언한다.
2. 대기 시간을 담는 변수를 생성하여, 각 신호등마다 도착시간에 더해준다.
3. 도착 시간에 신호등이 빨간불일 때, 대기 시간을 구해 대기 시간에 더해준다.
4. 1에서 선언했던 이동 시간에 대기 시간을 더해준다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class RoadNTrafficLight_2980 { public static void main(String[] args) throws IOException { System.out.println(solution(new BufferedReader(new InputStreamReader(System.in)))); } private static int solution(BufferedReader br) throws IOException { String str = br.readLine(); int N = Integer.parseInt(str.split(" ")[0]); int K = Integer.parseInt(str.split(" ")[1]); int answer =K; int waitTime =0; for(int i=0; i<N; i++) { String inputStr = br.readLine(); String[] strArr = inputStr.split(" "); int time = waitTime + Integer.parseInt(strArr[0]); int R = Integer.parseInt(strArr[1]); int G = Integer.parseInt(strArr[2]); time %=(R+G); // 이후의 시간에 대해서도 쉽게 구하기 위해 if(R - time >0) { waitTime+= R-time; } } br.close(); return answer+waitTime; } }
반응형'알고리즘 > 백준' 카테고리의 다른 글
BOJ) 좋은 대회 (0) 2020.06.11 BOJ) 비트 우정지수 (0) 2020.06.10 BOJ) Crazy_aRcade_Good (크레이지 아케이드) (0) 2020.06.09 BOJ) 김식당 (0) 2020.06.09 BOJ) 부분수열의 합 2 (2) 2020.06.03