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

YH·2023년 12월 13일
0

문제

콜라츠 추측 : 문제 링크


문제 분석

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

    • 1-1. 입력된 수가 짝수라면 2로 나눈다.
    • 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더한다.
      1. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복한다.
  • 예를 들어, 주어진 수가 6이라면 6 -> 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 - > 1이 되어 총 8번 만에 1이 된다. 위 작업을 몇 번이나 반복해야 하는지 return하는 함수, solution을 완성. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 -1을 return

  • 제한 사항

    • 입력된 수, num은 1 이상 8,000,000 미만인 정수이다.
  • 작업을 반복하는 횟수를 저장할 정수형 변수 answer을 0으로 초기화. while loop의 조건식을 num != 1로 하여 num이 1이 아닐동안 반복. if문을 통해 num이 짝수라면 2로 나눈값을 저장하고, else if문을 통해 홀수라면 3을 곱하고 1을 더한값을 저장. 작업 수행 후, answer을 1씩 늘리고, if문을 통해 answer값이 500을 초과하면 -1을 return. loop 탈출 후, 최종적으로 저장된 answer을 return


풀이

using namespace std;

long long solution(int a, int b) {
    long long answer = 0;
    long long temp = 0;
    
    if(a > b) {
        temp = a;
        a = b;
        b = temp;
    }
    for(int i = a; i <= b; ++i) answer += i;
    return answer;
}
profile
Keep Recycling Your Dreams

0개의 댓글