Leetcode Java Pairs of Songs With Total Durations Divisible by 60
업데이트:
문제
코드
class Solution {
public int numPairsDivisibleBy60(int[] time) {
long[] count = new long[60];
for (int t : time) {
count[t % 60]++;
}
long result = 0;
if (count[0] > 1) {
result += count[0] * (count[0] - 1) / 2;
}
if (count[30] > 1) {
result += count[30] * (count[30] - 1) / 2;
}
for (int i = 1; i < 30; i++) {
result += count[i] * count[60 - i];
}
return (int) result;
}
}
결과
설명
-
time 내 값들을 이용하여 두 값의 합이 60초 단위가 되는 경우의 수를 구하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- count는 60초로 나눈 나머지 여분의 시간으로 끝나는 값들의 갯수를 저장할 변수로, overflow를 방지하기 위하여 long 형태의 배열로 초기화하고 time의 각 값들을 60으로 나눈 나머지의 위치에 갯수를 저장해준다.
- result 경우의 수를 저장할 변수로, overflow를 방지하기 위하여 long 형태의 0으로 초기화한다.
-
count[0]의 갯수가 2개 이상인 경우, 해당 값들의 순서를 변경했을 때 나올 수 있는 경우의 수인 $\frac{count[0] \times (count[0] - 1)}{2}$를 result에 더해준다.
-
- count[30]의 갯수가 2개 이상인 경우, 0초와 동일하게 해당 값들의 순서를 변경했을 때 나올 수 있는 경우의 수인 $\frac{count[30] \times (count[30] - 1)}{2}$를 result에 더해준다.
- 0초와 30초를 제외한 1 ~ 29초 구간을 i를 증가시키며 60초 단위로 떨어지는 조합의 경우의 수를 result에 더해준 후, int로 형변환하여 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기