본문 바로가기

코딩테스트

[C++] 해밍 수 (Hamming Number)

숙제 1 (해밍 수)

해밍 (Hamming Number) 2, 3, 5 이외의 다른 소수를 약수로 가지지 않는 자연수를 말한다. 예를들면, 60은 소수 2, 3, 5 이므로 해밍수이다. 그러나 42소수 7나누어지므로 해밍 수가 아니다.

<규칙>

해밍수를 가장 작은 수인 1부터 점점 순서로 나열하는 방법은 다음과 같은 아이디어를 사용하구할 있다.

1. 자연수 1해밍수이다.

2. H해밍수이면, 2H, 3H, 5H또한 해밍수이다.

3. 다음으로 해밍수를 계산하기 위해서는,이전에 만들어진 해밍2, 3, 5수들 중에서 아직까지 선택되지 않은 중에서 가장 작은 것을 선택한다.

해밍수를 가장 작은 수인 1부터 점점 순서로 나열, k-번째 해밍수를 계산하는 프로그램작성하시오.

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;


int main(){
	vector<unsigned long long> arr;
	arr.push_back(1);
	int num=0x00;
	cin>>num;
	int i=0;
	while(i<num){
		arr.push_back(arr[i]*2);
		arr.push_back(arr[i]*3);
		arr.push_back(arr[i++]*5);
		sort(arr.begin(), arr.end()); 
		arr.erase(unique(arr.begin(),arr.end()),arr.end());
	}
		
	cout<<arr[num-1]<<endl;
	
	return 0;
}

'코딩테스트' 카테고리의 다른 글

[C++] 행렬 덧셈  (0) 2021.06.27
[C++] 집합 연산  (0) 2021.06.27
[C++] 농장  (0) 2021.06.27
[C++] 패리티 비트(Parity Bit)  (0) 2021.06.27
[C++] 소수  (0) 2021.06.27