본문 바로가기
프로그래머스 C++/Level.1

프로그래머스 Level.1 콜라츠 추측

by yeni_0224 2023. 10. 21.
728x90
반응형

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다.

예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.

#include <string>
#include <vector>

using namespace std;

int solution(int num) {
    int answer = 0;
    long long n = num;
    while(true){
        if(n == 1) break;
        n % 2 == 0 ? n /= 2 : n = n * 3 + 1;
        answer ++;
        if(answer == 500) {
            answer = -1;
            break;
        }
    }  
    return answer;
}

정말 허무하게도 변수의 자료형 때문에 정답을 맞추기까지 시간이 너무나도 오래 걸려버렸다. 분하다.

알고리즘은 너무나도 딱 맞았기 때문이다.

https://iingang.github.io/posts/Programmers-12943/

 

[프로그래머스] 콜라츠 추측 / C++

Contents

iingang.github.io

이 분의 블로그와 비교했는데 차이점은 변수의 자료형 뿐인걸?

하고 설마 진짜 자료형 차이인가 했는데 그게 이유였던 걸 안 것에서 온 허탈함.

난 져버렸다..!

 

연산 중에 int의 범위를 벗어날 수 있다는 그런 설마설마한 이유가 리얼이었다니 너무 허무해...!

문장을 줄이고 줄이고 줄이다가 결국 자료형 때문에 정답이 발생하지 않은 그런 아쉬운 문제였다.

728x90
반응형