Leetcode Java Minimum Time Difference
업데이트:
문제
코드
class Solution {
public int findMinDifference(List<String> timePoints) {
boolean[] visited = new boolean[1440];
int start = Integer.MAX_VALUE;
for (String timePoint : timePoints) {
String[] time = timePoint.split(":");
int minutes = Integer.parseInt(time[0]) * 60 + Integer.parseInt(time[1]);
if (visited[minutes]) {
return 0;
} else {
start = Math.min(start, minutes);
visited[minutes] = true;
}
}
int prev = start;
int result = Integer.MAX_VALUE;
for (int idx = start + 1; idx < 1440; idx++) {
if (visited[idx]) {
result = Math.min(result, idx - prev);
prev = idx;
}
}
return Math.min(result, Math.abs(prev - start - 1440));
}
}
결과
설명
-
시간을 저장한 timePoints 내 가장 작게 차이나는 두 시간의 차이를 분 단위로 반환하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- visited는 timePoints의 모든 값의 방문 여부를 저장하기 위한 배열로, 하루의 총 시간인 $24 \times 60 = 1440$ 크기로 정의한다.
- start는 가장 작은 시간의 위치를 분 단위로 저장하기 위한 변수로, Integer의 가장 큰 숫자로 정의한다.
- timePoints의 모든 값을 반복하여 아래를 수행한다.
- timePoint의 시간과 분의 구분 값인 콜론(“:”)을 기준으로 문자열을 분리한다.
- 시간을 분으로 변환한 값을 넣을 minutes에 time을 이용하여 시간의 위치인 time[0]을 숫자로 변환하여 60을 곱하고, 분의 위치인 time[1]을 숫자로 변환하여 더한 값을 넣어준다.
- visited의 minutes번째 값이 true인 경우 같은 시간이 존재하므로, 두 시간의 차이인 0을 주어진 문제의 결과로 반환한다.
- visited의 minutes번째 값이 false인 경우 같은 값이 없으므로, start에 start와 minutes 중 작은 값을 넣고 visited의 minutes번째 값을 true로 바꾸어준다.
-
이전 값을 저장할 prev에 start를 넣어주고, result를 Integer의 가장 큰 숫자로 넣어 초기화한다.
- $start + 1$부터 1440 미만까지 idx를 증가시키며 아래를 수행한다.
- visited의 idx번째 값이 true인 경우, result에 시간의 차이가 작은 값을 넣기 위해 result와 $idx - prev$ 값 중 작은 값을 넣어주고 prev에 idx를 넣어준다.
- 반복이 완료되면 연속된 시간 중 가장 작은 result와 처음과 마지막 시간의 차이인 $prev - start - 1440$ 중 작은 값을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기