U E D R , A S I H C RSS

Ugly Numbers/송지훈

설명

  • 조낸 간단함. 1500개짜리 ë°°ì—´ì�´ 꽉 찰때까지 1부터 시작해서
쭉 훑으면서 찾는 방�.
  • 2, 3, 5ì�˜ 배수ë�¼ëŠ” ì �ì—� 착안해서 코딩.

소�

정� 좋지 않� 코드. 900번째까지 구하는� 2 초걸리고,
1000번째까지 구하는� 7초 걸린다...

1500번째꺼 구하�� 했�니... 76초 걸린다...

#include <iostream>
#include <ctime>
using std::cout;
using std::cin;
using std::endl;
using std::clock_t;

#define LIMIT 1500                      // 배열 한계수

int main() {
	int arr[LIMIT] = {0}, num, index = 0, target;
	clock_t start,end;              // 수행시간 구할 때 쓰려고 넣� 변수.
	target = 1500;                  // 1500번째 수를 구하�� 할 때 쓰는 변수.

	start = clock();                // 시작한 시간.
	for(int i = 1;arr[target-1] == 0;i++) {
		num = i;
		while((num % 2) == 0) {
			num /= 2;
		}
		while((num % 3) == 0) {
			num /= 3;
		}
		while((num % 5) == 0) {
			num /= 5;
		}
		if(num == 1) {          // 2, 3, 5 로 나눴는� 몫� 1�면 못난�수.
			arr[index] = i; // 몫� 1� 아니면 그냥 잡수.
			index++;
		}
	}
	end = clock();                  // �난 시간.

	cout << "Run time = " << (double)(end-start)/CLK_TCK << endl
		 << arr[target-1] << endl;
	return 0;
}

�낀 �

다른 방�� 알고리즘으로 그냥 막 배열� 때려넣� 뒤
sorting � 사용하는 방법� ��해�야 하겠다 �는 것� �낌.

사실 처�부터 정렬� �야겠다고 ��했으나
�무지 방법� ��� 안남.

2, 3, 5� 거듭제곱꼴��는 것� 착안해서 지수�서 어떤 법칙� 찾아내려고 했으나
30개까지 구해�� 법칙� 못찾아서 그냥 위� 방법으로 구했�...


보창�형 코드보니 지수를 �서 하는 방법� 있는거 같��
�세히 보진 않았지만 그냥 막 때려넣지 않았나... 하는 ���...
결국 퀵 소트로 정렬하신 듯 한�...

아... 괜히 어렵다.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:19
Processing time 0.0040 sec