구현 문제입니다.
거리 n이 주어졌을 때, 화랑이가 최대로 갈 수 있는 거리를 구하는 문제입니다.
1초에 1의 거리를 걷는데, 화랑이 위치에 감시병이 일을 하는 중이라면 해당 위치가 최대입니다.
감시병이 일하는 시간인 workTime과 쉬는 시간인 restTime이 주어질 때,
특정 위치인 j에서 workTime과 restTime의 합의 나머지가 workTime보다 작으면 화랑이가 감시병에게 들키게됩니다.
int status = j % (worTime + restTime);
if(status>0 && status<=workTime){
// 감시병에게 들킴
}
위와 같은 예시이 있다고 가정하겠습니다.
그림의 감시는 4초동안 감시를 하고, 3초간 쉬게 됩니다.
즉 7초 간격으로 감시자가 일을 하는지 안하는지 알 수 있습니다.
이러한 특성으로 위치 j가 있을 때, 7로 나누면 감시자의 상태를 알 수 있습니다.
7로 나눴을 때 0보다 크면서 workTime이하이면 감시자가 일을 하고 있는 상태입니다.
그 이외는 감시자가 일을 하지 않습니다.
[구현 코드]
class Solution {
public static int solution(int distance, int[][] scope, int[][] times) {
int n = scope.length;
int answer = distance;
for (int i = 0; i < n; i++) {
int startArea = Math.min(scope[i][0], scope[i][1]);
int endArea = Math.max(scope[i][0], scope[i][1]);
int workTime = times[i][0];
int restTime = times[i][1];
for(int j=startArea; j<=endArea; j++){
int total = workTime + restTime;
int status = j % total;
if(status>0 && status<=workTime){
answer = Math.min(answer, j);
break;
}
}
}
return answer;
}
}
'알고리즘' 카테고리의 다른 글
백준 - 16234 인구 이동(Java) (0) | 2022.11.14 |
---|---|
프로그래머스 - 우박수열 정적분(Java) (4) | 2022.11.03 |
프로그래머스 - 하노이의 탑(Java) (0) | 2022.11.01 |
프로그래머스 - 셔틀버스(Java) (0) | 2022.10.27 |
프로그래머스 - 경주로 건설(Java) (0) | 2022.10.26 |