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
반응형
'프로그래머스 C++ > Level.1' 카테고리의 다른 글
프로그래머스 Level.1 없는 숫자 더하기 (1) | 2023.11.13 |
---|---|
프로그래머스 Level.1 음양 더하기 (0) | 2023.11.12 |
프로그래머스 Level.1 서울에서 김서방 찾기 (1) | 2023.09.24 |
프로그래머스 Level1. 두 정수 사이의 합 (0) | 2023.08.30 |
프로그래머스 Level.1 하샤드 수 (0) | 2023.08.21 |