2,3,5의 소인수로만 이루어진 수를 배열로 나타내었을 때 n번째 수를 구하기
public int uglyNumbers(int n) {
int arr[]=new int[n+1];
arr[1]=1;
int two=1;
int three=1;
int five=1;
int min;
for(int i=2; i<arr.length;i++){
if(arr[two]*2<arr[three]*3) min=arr[two]*2;
else min=arr[three]*3;
if(min>arr[five]*5) min=arr[five]*5;
if(min==arr[two]*2) two++;
if(min==arr[three]*3) three++;
if(min==arr[five]*5) five++;
arr[i]=min;
}
return arr[n];
}
- 투 포인트 알고리즘 방식을 사용
- 총 세개의 포인터를 설정해 놓고 가장 작은 수인 경우에 해당 포인터를 1 증가시킨다.
- 가장 작은 수를 구한것을 배열에 넣고 반복한다.