코딩테스트

[프로그래머스] 콜라츠 추측 - Java

김꿍디꿍디 2024. 11. 16. 23:36
반응형

문제


https://school.programmers.co.kr/learn/courses/30/lessons/12943

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

  • 소요 시간 : 5분
  • 난이도 : LV 1

나의 풀이


 

접근 방법

반복문을 이용한다.

주의할 점 : int 범위를 초과하는 경우가 있어 long으로 타입 변환이 필요하다.

1. 1이면 return

2. 횟수 카운트 증가

3. 짝수일 경우, 홀수일 경우 조건문으로 나눠서 처리

4. 횟수가 500일 경우 -1 리턴 아니면 그냥 횟수 리턴

시간복잡도

O(N)

N = 1로 변경하는 동안 반복하는 횟수 = 최대 500

코드

class Solution {
    public int solution(int num) {
        int answer = 0;
        long num2 = num;
        
        do {               
            if (num2 == 1)
                break;
            
            answer++;    
            if (num2 % 2 == 0) 
                num2 /= 2;
            else
                num2 = num2 * 3 + 1;
        } while(answer < 500);
        
        if (answer == 500) 
            return -1;
        
        return answer;
        
    
    }
}

 

결과 : 정답

 

 


다른 사람의 풀이


코드

class Solution {
    public int solution(int num) {
        long n = (long)num;
        for(int i=0; i<500; i++){
            if(n == 1) return i; 
            n = (n % 2 == 0) ? n / 2 : n * 3 + 1;
        }

        return -1;
    }
}

 

 

결과 : 정답

 

정리


3항연산자를 이용해 더 짧게 작성할 수 있었다.

500회로 한정되어 있으므로 for문을 사용하는 것도 괜찮아 보인다.



 

 

반응형