문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
알고리즘
없음
풀이
1초에 1m를 가기 때문에 A m에 있을 때는 A초 경과한 시점이다.
따라서 경비병의 각 경비 구역에 있는 시점에 경비병이 깨어있는 가장 빠른 시간을 구한다.
경비병은 근무-휴식 루틴을 한번 하는데 times[0] + times[1] 이 걸리므로
현재 시간을 times[0] + times[1] 로 나머지 연산하면 해당 경비병이 현재 근무 중인지, 휴식 중인지 알 수 있다.
만약 경비병의 scope가 [20, 32] 이고, times가 [6, 8] 이라면
화랑이가 23m에 있을 때는 23초가 경과한 시점이고, 경비병은 14초마다 근무-휴식 한 바퀴를 돌기 때문에
한 바퀴를 돌고 9초가 지난 상황이므로 다시 휴식 중이다.
화랑이가 32m에 있을 때는 32초가 경과한 시점이므로 경비병이 근무-휴식을 2바퀴 돌고 4초가 지난 상황으로 근무 중이므로 붙잡히게 됨을 알 수 있다.
* scope가 정렬되어있지 않기 때문에 정렬하거나, min 값을 갱신한다.
* 경비 범위가 (5, 3) 처럼 큰 수부터 나올 수 있어 경비 시작 범위와 끝 범위를 직접 비교해 설정해야한다.
코드
class Solution {
public int solution(int distance, int[][] scope, int[][] times) {
int min = distance;
for(int i=0; i<scope.length; i++) {
int start = Math.min(scope[i][0], scope[i][1]);
int end = Math.max(scope[i][0], scope[i][1]);
for(int j=start; j<=end; j++) {
if((j - 1) % (times[i][0] + times[i][1]) + 1 <= times[i][0])
min = Math.min(min, j);
}
}
return min;
}
}
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 우박수열 정적분 (Java) (0) | 2022.11.12 |
---|---|
[프로그래머스] 피로도 (Java) (0) | 2022.11.12 |
[프로그래머스] 롤케이크 자르기 (Java) (0) | 2022.11.12 |
[프로그래머스] 택배상자 (Java) (0) | 2022.11.12 |
[프로그래머스] 연속 부분 수열 합의 개수 (Java) (0) | 2022.11.12 |