콜라스 추측

NJW·2021년 8월 16일
0

코테

목록 보기
47/170

들어가는 말

주어진 수가 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

다른 사람들 코드를 훑어봤는데 삼항연산자를 쓰면 더 깔끔하게 나오는 걸 발견했다. 이럴수가... 늘여서 푸는데 익숙해져서, 삼항연산자 등을 충분히 쓸 수 있어도 생각하기가 어렵다.

profile
https://jiwonna52.tistory.com/

0개의 댓글