728x90
문제
https://www.acmicpc.net/problem/2980
풀이
왜 그랬는지 모르겠는데 % 연산을 / 연산으로 놔두고 왜 안되는지 다 찍어보느라 개ㅐㅐㅐㅐ오랫동안 찾은 것 같다,,, 너무 어이가 없었다
암튼 신호등들의 정보를 배열에 저장해 두었다가 while(true){ } 안에서 time과 current를 증가해주면서 이동시켜 주었다
그러다 상근이가 신호등이 있는 위치에 도달하면 check() 함수에 현재 time과 신호등의 정보를 변수로 넘겨주어 신호등이 빨간불이면 몇초가 남았는지, 초록불이면 0초를 반환하여 그만큼 time을 증가시켜 주었다.
코드
// 2980번 도로와 신호등
// https://www.acmicpc.net/problem/2980
package BAEKJOON;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Num2980_도로와신호등 {
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[][] arr = new int[N][3];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
arr[i][0] = Integer.parseInt(st.nextToken()); // 신호등 위치
arr[i][1] = Integer.parseInt(st.nextToken()); // 빨간불 지속시간
arr[i][2] = Integer.parseInt(st.nextToken()); // 초록불 지속시간
}
int current = 0; // 현재 위치
int time = 0;
while (true) {
if (current == L) {
break;
}
for (int i = 0; i < N; i++) {
if (current == arr[i][0]) { // 현재위치에 신호등이 있는 경우
if (check(time, arr[i][1], arr[i][2]) == 0) {
break;
} else if (check(time, arr[i][1], arr[i][2]) != 0) {
time += check(time, arr[i][1], arr[i][2]);
break;
}
}
}
current++;
time++;
}
System.out.println(time);
}
// 지금 건널 수 있는지 없는지 알려주는 함수
public static int check(int time, int R, int G) {
if (time > (R + G)) {
time = time % (R + G);
}
if (time <= R) {
return R - time;
} else if (time > R) {
return 0;
}
return 0;
}
}
728x90