최's 먹공로그
BOJ2980_도로와신호등 본문
https://www.acmicpc.net/problem/2980
문제요약
1. 상근이는 1초에 1미터 움직인다.
2. 신호등의 색상이 빨간색인 경우 그 자리에서 멈추고 초록색으로 바뀔때 까지 기다린다.
3. 초기에는 모든 신호등의 색상은 빨간색이다.
4. 상근이가 도로의 끝까지 이동하는데 걸리는 시간을 구하자.
문제issue
1. 흐르는 시간이 모든 신호등의 지속시간에 영향을 주는지
해결흐름
처음 생각
1. 1차원 배열에 신호등이 있는 위치를 표시
2. list에 신호등의 빨간색 지속 시간, 초록색 지속 시간, 상태(빨간색?초록색?)를 저장
3. 상근이의 움직임에 해당하는 변수를 증가 시켜주다가
(1) 신호등이 있는 위치에서 빨간색 상태면 시간만 증가
-> 상근이가 움직일 때마다 list를 모두 탐색해야 하고 list의 값을 변화 시켜주다 보니 꼬임
나중 생각
1. 상근이의 위치가 신호등일 경우 처음 생각처럼 완전 구현으로 하면 어렵
2. 전체 시간인 time과 신호등의 지속시간을 계산해보니
time % (빨간색 지속시간 + 초록색 지속시간) 이 빨간색 지속시간보다 작거나 같다면
즉, time % (빨간색 지속시간 + 초록색 지속시간) <= 빨간색 지속시간 이라면
상근이가 빨간불 신호등임을 알았음 이때, 전체 시간에 남은 빨간색 지속 시간을 더 해주면 됨
즉, time += (빨간색 지속시간 - time % (빨간색 지속시간 + 초록색 지속시간))
예를 들어 빨간색 지속시간이 5 , 초록색 지속시간이 3 일때 상근이가 신호등을 만났고 time이 3이라면
time % (빨간색 지속시간 + 초록색 지속시간)은 3이고 빨간색 지속시간 보다 작음
빨간색 지속시간(5) - 3 해주면 2만큼 대기해야 하기 때문에 time += 2를 해줌
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | package backjoon; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main2980_도로와신호등 { static class pair { int r; int g; public pair(int r, int g) { this.r = r; this.g = g; } } public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine().trim(), " "); int N = Integer.parseInt(st.nextToken()); int L = Integer.parseInt(st.nextToken()); pair[] load = new pair[L+1]; for (int i = 0; i < N; i++) { st = new StringTokenizer(br.readLine().trim(), " "); int D = Integer.parseInt(st.nextToken()); int R = Integer.parseInt(st.nextToken()); int G = Integer.parseInt(st.nextToken()); load[D] = new pair(R,G); } int time = 0; int sang = 0; while (sang < L) { ++time; ++sang; // 신호등이 있음 if(load[sang] != null) { int go = time % (load[sang].r + load[sang].g); if(go <= load[sang].r) { time += (load[sang].r - go); } } } System.out.println(time); } // end of main } // end of class | cs |
'APS' 카테고리의 다른 글
BOJ14891_톱니바퀴 (2) | 2019.06.04 |
---|---|
BOJ14499_주사위굴리기 (0) | 2019.06.03 |
BOJ17143_낚시왕 (2) | 2019.05.09 |
BOJ17142_연구소3 (0) | 2019.05.07 |
BOJ16235_나무 재테크 (4) | 2019.04.11 |