어글리 넘버는 결국 이전의 어글리넘버(seed) * 2 or * 3 or * 5라는 생각으로
넉넉한(답을 이미 알기에 ㅎㅎ) 싸이즈의 불리언맵핑 배열을 만들어
어글리한지 확인하려는 수의 seed가 어글리했는지를 확인하는 방법으로
서치 시간을 엄청나게 줄였다고 자부했는데...
결과는...망했음.
#include<iostream>
using namespace std;
#define RANK 1500
#define MAX 999999999
bool uglyMap[MAX];
bool isUgly(int number){
if(number%2 == 0){
number/=2;
}
else if(number%3 == 0){
number/=3;
}
else if(number%5 == 0){
number/=5;
}
else{
return false;
}
if(uglyMap[number] == true)
return true;
else
return false;
}
int main(){
//for(int i = 0; i < MAX; i++)
// uglyMap[i] = false;
uglyMap[1] = true;
uglyMap[2] = true;
uglyMap[3] = true;
uglyMap[4] = true;
uglyMap[5] = true;
int count = 5;
int number = 5;
while(count < RANK){
number++;
if(isUgly(number)){
uglyMap[number] = true;
count++;
}
}
cout << number;
return 0;
}
/*
#include<iostream>
using namespace std;
bool isUgly(int number){
while(number%2 == 0){
number /= 2;
if(number == 1)
return true;
}
while(number%3 == 0){
number /= 3;
if(number == 1)
return true;
}
while(number%5 == 0){
number /= 5;
if(number == 1)
return true;
}
return false;
}
int main(){
int count = 1;
int number = 1;
while(count < 100){
number++;
if(isUgly(number)){
count++;
}
}
cout << number;
return 0;
}*/