[C_C++]코딩테스트 연습/[프로그래머스] level 1

[C++] 콜라츠 추측 - 3번째 기본 예제, 13번 주의

코딩굼벵이 2021. 7. 30. 23:54
728x90

 

내 풀이

그냥 보면 되게 쉬운 문제인데 까보니 좀 까다로운 문제였다.

  1. 처음엔 3번째 테스트 케이스에서 -1이 아니라 488이 나오는데, 아마 3을 곱하고 1을 더하면서 int의 범위를 벗어나는 등의 문제가 생기기 때문이 아닐까 싶다. 이는 짝수 케이스의 else로 홀수를 잡지 않고 num % 2 == 1 else if 문으로 홀수를 잡아서 해결했다.
  2. 처음에 return i+1을 포문 맨 밑에 두고 제출해보니 13번에서 오류가 났는데, 1을 넣었을 때는 해당 과정을 거치지 않는 점을 고려하지 못해서였다. 이는 포문 맨 위에서 num==1인지 검사하고 return 함으로써 해결했다.
#include <string>
#include <vector>

using namespace std;

int solution(int num) {
    for (int i = 0; i < 500; i++) {
        if (num == 1) return i;
        if (num % 2 == 0) num /= 2;
        else if (num % 2 == 1) num = num * 3 + 1;
    }
    return -1;
}

 

쉬운 문제를 어렵게 내는 법....^.ㅠ