문제
콜라츠 수열 만들기 : 문제 링크
문제 분석
- 모든 자연수 x에 대해서 현재 값이 x이면 x가 짝수일 때는 2로 나누고, x가 홀수일 때는 3 * x + 1로 바꾸는 계산을 계속해서 반복하면 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 부른다.
- 위 과정에서 거쳐간 모든 수를 기록한 수열을 콜라츠 수열이라고 부른다. 계산 결과 1,000보다 작거나 같은 수에 대해서는 전부 언젠가 1에 도달한다는 것이 알려져 있다. 임의의 1,000 보다 작거나 같은 양의 정수 n이 주어질 때 초기값이 n인 콜라츠 수열을 return
- 제일 먼저 초기값 n을 push_back() 함수를 통해 정수형 리스트 answer에 저장. while loop를 통해 연산을 반복하고, 조건문을 n != 1으로 설정하여 n이 1이 되면 loop를 탈출. loop 내에서 if ~ else 문을 통해 n이 홀수이면 3 * n + 1를, 짝수이면 n / 2를 수행한 값을 n에 저장하고 answer에 저장. 최종적으로 저장된 answer를 return
풀이
#include <vector>
using namespace std;
vector<int> solution(int n) {
vector<int> answer;
answer.push_back(n);
while(n != 1) {
if(n % 2 == 1) n = 3 * n + 1;
else n /= 2;
answer.push_back(n);
}
return answer;
}