UglyNumbers 소ê°� ¶
처ì�Œì—” 어글리넘버ì�˜ 규칙성ì�„ 찾았다. ì�´ê²ƒìœ¼ë¡œ 너무나 ë§Žì�€ 시간ì�„ í—ˆë¹„í•˜ê³ ë‚˜ì„œ
규칙성ì�€ 없다(ì‹¤ì œë¡œ 없는지는 모름)ê³ ê²°ë¡ .(있었다면 0.1초내로 답ì�´ 튀어 나올것ì�´ë¯€ë¡œ '4초내로'ë�¼ëŠ” 단서ë�„ 없었ì�„듯..)
ì�¼ë‹¨ n번째 어글리넘버 ì�´í›„ì�˜ 수들ì�€ ì�´ì „ 어글리넘버ì—� 2나 3ì�´ë‚˜ 5를 곱해서 ì�´ë£¨ì–´ì§„다는 것ì�„ ê°€ì§€ê³ 1부터 시작하여
n번째 수 까지 �� 2,3,5를 곱해나간다.
규칙성ì�€ 없다(ì‹¤ì œë¡œ 없는지는 모름)ê³ ê²°ë¡ .(있었다면 0.1초내로 답ì�´ 튀어 나올것ì�´ë¯€ë¡œ '4초내로'ë�¼ëŠ” 단서ë�„ 없었ì�„듯..)
ì�¼ë‹¨ n번째 어글리넘버 ì�´í›„ì�˜ 수들ì�€ ì�´ì „ 어글리넘버ì—� 2나 3ì�´ë‚˜ 5를 곱해서 ì�´ë£¨ì–´ì§„다는 것ì�„ ê°€ì§€ê³ 1부터 시작하여
n번째 수 까지 �� 2,3,5를 곱해나간다.
한가지 ì�´ìƒ�한ì �ì�€ 10만번째 어글리넘버가 44314690598262522787512975360 ì�´ ë‚˜ì˜¤ë“ ë�°
ë¬¸ì œì—�서 ì œì‹œí•œ ê°’ê³¼ 너무 í�° ì°¨ì�´ê°€ 나는듯.. 어디가 잘못ë�˜ì—ˆëŠ”ì§€ ëª¨ë¥´ê² ë‹¤.
ë¬¸ì œì—�서 ì œì‹œí•œ ê°’ê³¼ 너무 í�° ì°¨ì�´ê°€ 나는듯.. 어디가 잘못ë�˜ì—ˆëŠ”ì§€ ëª¨ë¥´ê² ë‹¤.
소스 ¶
~cpp
/*
* Created on 2005. 3. 30
*/
/**
* @author 중앙대 컴퓨터공학과 01 ��현
*/
import java.util.*;
import java.math.*;
public class UglyNumbers {
public ArrayList arr;
/**
* n� arr� 삽입하� 중복값� 있으면 아무것� 하지않아.
* @param n double ì‚½ìž…í• ê°’
* @return int 코드 1:삽입완료 -1:�미 값 있� 1:맨 마지막� 추가
*/
public int insert(double n) {
for (int i = 0; i < arr.size(); i++) {
if (((Double) arr.get(i)).doubleValue() > n) {
arr.add(i, new Double(n));
return 1;
} else if (((Double) arr.get(i)).doubleValue() == n)
return -1;
}
arr.add(new Double(n));
return 0;
}
public int start() {
int index = 1;
arr = new ArrayList();
arr.add(new Double(1.0));
while (index != 1500) {
insert(((Double) arr.get(0)).doubleValue() * 2.0);
insert(((Double) arr.get(0)).doubleValue() * 3.0);
insert(((Double) arr.get(0)).doubleValue() * 5.0);
arr.remove(0);
index++;
}
System.out.println("The 1500'th ugly number is "+new BigDecimal(((Double)arr.get(0)).doubleValue()));// + " " + arr.size());
return 0;
}
public static void main(String[] args) {
UglyNumbers ug = new UglyNumbers();
ug.start();
}
}










