Leetcode Java Super Ugly Number
업데이트:
문제
코드
class Solution {
public int nthSuperUglyNumber(int n, int[] primes) {
int[] nums = new int[n];
int pre = 1;
int min = 1;
int length = primes.length;
int[] idx = new int[length];
int[] prePrimes = new int[length];
Arrays.fill(prePrimes, 1);
for (int i = 0; i < n; i++) {
nums[i] = min;
min = Integer.MAX_VALUE;
for (int j = 0; j < length; j++) {
if (prePrimes[j] == pre) {
prePrimes[j] = primes[j] * nums[idx[j]];
idx[j]++;
}
min = Math.min(prePrimes[j], min);
}
pre = min;
}
return nums[n - 1];
}
}
결과
설명
-
주어진 정수 배열 primes의 소인수를 이용한 숫자를 만들 때 n번째가 되는 정수를 반환하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- nums는 primes의 소인수를 이용한 숫자를 넣을 배열로, 주어진 정수 n의 크기로 초기화한다.
- pre는 이전의 값을 저장하는 변수이다.
- min은 pre 다음에 나올 primes의 소인수를 이용한 숫자를 저장할 변수이다.
- length는 primes의 길이를 저장할 변수이다.
- idx는 primes의 동일 위치의 값을 반복한 횟수를 저장할 배열로, length의 크기로 초기화한다.
- prePrimes는 primes를 이용하여 idx의 동일 위치번쨰 반복한 결과를 넣을 배열로, length의 크기로 초기화하고 모든 위치의 값을 1로 초기화한다.
- 0부터 n 전까지 i를 증가시키면서 반복하여 nums에 값을 넣어준다.
- nums의 i번째 위치에 min 값을 넣어준다.
- min 값에 Integer의 가장 큰 값을 넣어준다.
- 0부터 length 전까지 j를 증가시키면서 반복하여 min 값을 구한다.
- prePrimes의 j번쨰 값이 pre와 동일한 경우, prePrimes[j]의 값에 $primes[j] \times num[idx[j]]$ 결과를 넣어주고 j를 증가시킨다.
- min과 prePrimes[j]의 최소 값을 min에 넣어준다.
- pre에 min 값을 넣어준다.
- primes의 소인수를 이용한 숫자를 만들 때 n번째 값이 되는 nums의 $n - 1$번째 값을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기