본문 바로가기

개발/프로그래머스

콜라츠 추측

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

 

코딩테스트 연습 - 콜라츠 추측

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다. 1-1. 입력된 수가 짝수라면 2

programmers.co.kr

최근에 콘솔로 회원제 게시판으로 단련되서 그런지 비교적 간단한 제어문을 요구한 문제였습니다.

// 내 코드
class Solution {
	    public int solution(int num) {
	        int answer = 0;
	        while(num !=1){
	            if(answer==500){
	                return -1;
	            }
	            if(num%2==1){
	                num = num*3+1;
	                answer++;
	            }
	            else{
	                num = num/2;
	                answer++;
	            }
	        }
	        return answer;
	   }
}
// 추천많이 받은 코드
class Collatz {
	public int collatz(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;
            // 홀수면 n=n*3+1, 짝수면 n=n/2
			}
		return -1;
		}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
	public static void main(String[] args) {
		Collatz c = new Collatz();
		int ex = 6;
		System.out.println(c.collatz(ex));    
	}
}

내 코드와 추천을 많이 받은 코드의 핵심 조건은 동일하지만, 추천을 많이 받은 코드는 삼항연산자를 이용해서 좀더 간결하게 표현했다.
삼항연산자의 형태는 조건 ? A : B 으로 조건이 True면 A, False면 B를 반환한다.
위 코드는 n에 반환한 값을 바로 대입하는 코드.

추천받은 코드에서 배울 점은 변수의 크기를 고려했다는 점이다. 입력된 수가 코드를 진행하다보면 int의 범위를 넘어설 수 있어서 long으로 강제형변환을 한 것을 확인할 수 있다.  이전 문제에서 변수의 크기를 고려하지 않아 문제가 풀리지 않았음에도 이번에도 고려하지 않았다. 문제 풀이중 오류발생시 체크할 리스트에 추가해야겠다.

 

'개발 > 프로그래머스' 카테고리의 다른 글

최대공약수, 최소공배수(유클리드호제법)  (0) 2021.08.19
하샤드 수  (0) 2021.08.16
x만큼 간격이 있는 n개의 숫자  (0) 2021.08.16
행렬의 덧셈  (0) 2021.08.16
프로그래머스 핸드폰 번호가리기  (0) 2021.08.16