<알고리즘 문제풀이&연습>/[C++] 백준, 프로그래머스 등등

[Level 2] 콜라즈 추측

BlockDMask 2017. 12. 26. 07:00
반응형
  • 안녕하세요. BlockDMask 입니다.

  • 오랜만에.. (새 환경에 적응하느라..)  블로그를 하네요.

  • 다시 꾸준히 시작해보겠습니다. 

  • 프로그래머스 알고리즘 문제 입니다.
    171110 문제 빼먹음 -> 171226 완료

0. 제목

  • 프로그래머스 Level 2 콜라즈 추측

  • Programmers Level 2 Collatz

  • C++ 알고리즘 문제

1. 문제 설명

  • 1937년 Collatz란 사람에 의해 제기된 이 추측은,
    입력된 수가 짝수 라면 2로 나누고, 
    홀수라면 3을 곱하고 1을 더한 다음,
    결과로 나온 수에 같은 작업을 1이 될 때까지 반복할 경우 모든 수가 1이 된다는 추측입니다.

  • 예를 들어, 입력된 수가 6 이라면 
    6 -> 3 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1 이 되어
    총 8번 만에 1이 됩니다.
    collatz 함수를 만들어 입력된 수가 몇 번 만에 1 이 되는지 반환하면 됩니다.
    단, 500번을 반복해도 1이 되지 않는다면 -1 을 반환하면 됩니다.

2. 풀이 과정

  • parameter로 받은 num을 1이 될때까지 반복문(while)을 돌립니다.

  • 반복문(while)안에서 
    조건1 -> 짝수라면 2로 나누고
    조건2 -> 홀수라면 3을 곱하고 1을 더하고
    조건3 -> 횟수가 500을 반복해도 1이 되지 않은다면 -1 반환.

  • 각 조건을 작성해 주면서
    answer(횟수)를 하나씩 더해줍니다.


3. 소스 코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//https://programmers.co.kr/learn/challenge_codes/150
//LEVEL2_collatz
 
#include<iostream>
using namespace std;
 
int collatz(int num)
{
    int answer = 0;
 
    while(num != 1){
        if(answer>=500){
            return -1//조건
        }
 
        if(num%2 == 0//even
        {
            num = num >> 1;   //num /= 2;
        }
        else //odd
        {
            num = (num*3+ 1;
        }
        answer += 1;
 
    }
    return answer;
}
cs


4. 인증



문제 출처 : https://programmers.co.kr/learn/challenge_codes/150

감사합니다.

반응형