콜라스 추측
들어가는 말
주어진 수가 1이 될 때까지 계산을 반복해서 그 횟수를 리턴하는 문제이다. 계산 자체는 간단했지만, 후술할 자료형 문제 때문에 잠시 버벅였다.
코드 설명
while문을 써서 x가 1이 아닐 경우에만 반복했다. 다만, n이 626331일 때에서 자꾸만 이상한 값이 나오는 것이다. 질문하기를 찾아보니 626331일 경우 계산하는 숫자가 커져서 정수형 int가 못 담는 다는 것.
int solution(long num)
매개 변수 num의 자료형을 int에서 long로 바꿔줬더니만, 이번에는 런타임 에러인지 뭔지...
그래서 solution함수 안에서 x를 long 자료형으로 선언하고 num값을 따로 넣어줬다.
코드
#include <string>
#include <vector>
using namespace std;
int solution(int num) {
/*while문으로 값이 1이 될 때까지.
안에서 1-1과 1-2를 반복하고 count를 더해준다.*/
int answer = 0;
long x = num;
while(x != 1) {
if(x % 2 == 0){
x = x / 2;
}else{
x = (x * 3) + 1;
}
answer++;
if(answer >= 500){
return -1;
}
}
return answer;
}
의문점
매개 변수 int를 long로 바꿔줘도 상관 없지 않나? 굳이 long x = num으로 따로 넣어줘야 풀리는 이유를 모르겠다... 흠...
P.s
다른 사람들 코드를 훑어봤는데 삼항연산자를 쓰면 더 깔끔하게 나오는 걸 발견했다. 이럴수가... 늘여서 푸는데 익숙해져서, 삼항연산자 등을 충분히 쓸 수 있어도 생각하기가 어렵다.
Author And Source
이 문제에 관하여(콜라스 추측), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jy1999/콜라스-추측저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)