프로그래머스 level 1 문제
리뷰
문제에 테스트 케이스 3개가 나와있는데, 626331 이 제대로 답이 안나왔었다.
이상해서 계산과정 while 문 내부를 출력해보니까,
홀수 가 된 경우에 * 3 하는 과정에서 int 표현 범위를 넘어가서 음수로 표현되고 난리가 났었다.
long long 으로 변환하고 나서 실행해보니 626331 의 답이 -1로 잘 나왔다.
근데, 답을 제출했더니 테스트 케이스 1개가 틀렸다. 이유는 1때문이었다.
solution 함수에 입력이 1로 들어왔을 때는, 연산할 필요가 아예 없으니 처음부터 예외처리가 필요하다고 했다.
코드
#include <string>
#include <vector>
using namespace std;
int solution(int num) {
int answer = 0;
int limit = 500;
long long temp = num; // 자료형 변환
if(num == 1) return 0; // 1은 연산 필요 없다
while(limit--){
if(temp % 2 == 0){
temp /= 2;
}else{
temp = (temp * 3) + 1;
}
answer++;
limit--;
if(temp == 1) break;
}
return temp != 1 ? -1 : answer;
}
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 전화번호 목록 c++ (0) | 2020.10.31 |
---|---|
[프로그래머스] 주식가격 c++ 2가지 풀이 (0) | 2020.10.31 |
[프로그래머스] 하샤드 수 c++ (0) | 2020.07.22 |
[프로그래머스] 핸드폰 번호 가리기 c++ (0) | 2020.07.22 |
[프로그래머스] 이상한 문자 만들기 c++ (0) | 2020.07.20 |