알고리즘 : 프로그래머스 : JAVA : 콜라츠 추측

2022. 1. 19. 17:05알고리즘/프로그래머스

반응형

<문제>


<코드 & 설명>

class Solution {
    public int solution(int n) {
        long num = n; // 오버플로우 방지를 위한 형변환 필요
        int count = 0;
        
        while (num != 1) { 
            
            if (num % 2 == 0) {   /* 짝수일 경우 */
                num /= 2;   // num = num / 2; 
            
            } else {           /* 홀수일 경우 */
                num = num * 3 + 1;
            }
            count++;   // count값을 먼저 사용한 후 1 증가
            
            if (count > 500)  // count값이 500을 넘으면 -1로 리턴
                return -1;
        }
        
        return count;
    }
}

1. 매개변수로 입력 받은 int형 n 값을 long으로 바꿔주지 않으면 오버 플로우가 나와서,
음수로 한 번 바뀌기 때문에 결과 값이 꼬여 long으로 형변환을 해준다.
2. if문으로 짝수일 경우 2로 계속 나눈 값을 구한다.
3. else로 홀수일 경우 3을 곱하고 1을 더한 값을 구한다.
4. count++; 카운트 값을 저장해준다.
5. if문으로 count값이 500을 넘어가면 -1을 리턴해준다.
6. 최종 카운트 값을 리턴한다. 


<참고>

 

<자바의 비교 연산자 (==, !=, <, >, <=, >=)>
a == b : 두 값이 같으면 true, 아니면 false
a != b : 두 값이 다르면 true, 아니면 false
a < b : 좌변 값이 작으면 true, 아니면 false  
a > b : 좌변 값이 크면 true, 아니면 false
a <= b : 좌변 값이 작거나 같으면 true, 아니면 false
a >= b : 좌변 값이 크거나 같으면 true, 아니면 false

<증감 연산자>
++x : x를 먼저 1증가시킨 후 그 값을 사용
--x : x를 먼저 1감소시킨 후 그 값을 사용
x++ : x값을 먼저 사용한 후 1 증가
x-- : x값을 먼저 사용한 후 1 감소

ex)
int a = 10;
a++; //  a = a + 1 과 같다.
double b = 1.0;
b++; // b = b + 1과 같다.

 

 

<대입 연산자>

반응형