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 |