반응형
안녕하세요. 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
감사합니다.
반응형
'<알고리즘 문제풀이&연습> > [C++] 백준, 프로그래머스 등등' 카테고리의 다른 글
[프로그래머스] LEVEL 1 : 자연수 뒤집어 배열로 만들기 (C++) (0) | 2018.08.17 |
---|---|
[프로그래머스] LEVEL 1 : 문자열 다루기 기본(C++) (0) | 2018.08.15 |
[프로그래머스] LEVEL 1 : 나누어 떨어지는 숫자 배열(C++) (4) | 2018.08.05 |
[프로그래머스] LEVEL 1 : 가운데 글자 가져오기(C++) (0) | 2018.08.04 |
[Level 1] 피보나치 수 (반복문) (3) | 2017.12.15 |
[Level 1] 최대공약수와 최소공배수 (0) | 2017.12.14 |
[백준 1463] 1로 만들기 (BFS) (0) | 2017.12.13 |
[Level 1] 행렬의 덧셈 (0) | 2017.12.13 |