문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/12943
1-1. 입력된 수가 짝수라면 2로 나눔
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더함
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복
이때 주어진 수가 0이라면 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 -1 반환
문제 풀이법
1단계라 상당히 구현이 상당히 간단하지만 예외사항을 간과하여서 틀렸던 문제
문제에서 구현하라는 그대로 구현
주의해야 할 점
1. 생각 없이 하다가는 주어진 수가 1일때, 바로 while문을 타버려서 의도한 값 0이 아닌 3이 반환됨 => 주어진 수가 0일때와 1일때 return 0을 하도록 설정
2. 주어진 수가 626331일 경우 의도한 값은 -1이지만 488이 나오는 현상 발생 => 중간에 int 오버플로우가 나버리기에 int 대신 long을 사용함
소스 코드
#include <string>
#include <vector>
using namespace std;
int solution(int num) {
int answer = 0;
int cnt = 0;
if (num == 0 || num == 1)
return 0;
long n = num;
while (1)
{
if (n % 2 == 0)
n = n / 2;
else
n = n * 3 + 1;
cnt++;
if (n == 1)
break;
if (cnt == 500)
return -1;
}
answer = cnt;
return answer;
}
'Algorithm Study' 카테고리의 다른 글
[프로그래머스] 1단계 - 문자열 내 마음대로 정렬하기 (0) | 2023.01.05 |
---|---|
[프로그래머스] 1단계 - [1차] 비밀지도.cpp (0) | 2023.01.05 |
[프로그래머스] 1단계 - 예산 (0) | 2023.01.05 |
[프로그래머스] 1단계 - 3진법 뒤집기 (0) | 2023.01.04 |
[백준] 17413 단어 뒤집기 2 (0) | 2023.01.03 |