문제
https://school.programmers.co.kr/learn/courses/30/lessons/133501
접근 방법 및 풀이
화랑이가 1미터 움직일 때 마다 경계 근무를 서는 근무자의 근무 시간인지 확인하고 해당 근무자가 근무하는 영역에 화랑이가 포함 되는지 확인
중요한 점은 scope의 근무 영역이 오름차순 정렬이 되어 있지 않은 테스트 케이스가 있으므로 근무 영역을 확인 하는 경우에는 0번째 수와 1번째의 수 중에 작은 수와 큰 수를 비교 하여 근무 영역을 비교 해야 함
public class Q30_133501 {
public int solution(int distance, int[][] scope, int[][] times) {
int index = 1;
int length = scope.length;
while (index < distance) {
for (int i = 0; i < length; i++) {
int[] t = times[i];
int[] s = scope[i];
if (isWork(index, t) && isScope(index, s)) {
return index;
}
}
index++;
}
return index;
}
public boolean isWork(int index, int[] time) {
int totalTime = time[0] + time[1];
index = index % totalTime;
return index != 0 && index <= time[0];
}
public boolean isScope(int index, int[] scope) {
int min = Math.min(scope[0], scope[1]);
int max = Math.max(scope[0], scope[1]);
return index >= min && index <= max;
}
}