[2020-11-26] 콜라츠 추측
2020. 11. 26. 10:40ㆍ코딩테스트
푼 시간 : 40분
언어 : 자바
programmers.co.kr/learn/courses/30/lessons/12943
코딩테스트 연습 - 콜라츠 추측
1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다. 1-1. 입력된 수가 짝수라면 2
programmers.co.kr
동적 계획법을 이해하기 위해 문제를 재귀적으로 풀어보았다.
나름 시간을 많이 잡아먹을 것으로 예상했으나 오히려 재귀적 표현에서 막힌것이 아니라
answer++을 해주어 막혔다.. 혼자서 10분정도 왜 answer에 값이
추가가 안되는지 계속 고민하다가 생각해보니 호출을 하면서 불러야 하는데
호출을 하고나서 부르자니, answer에 값이 추가가 안되는것이 이해가 갔다.
얼른 동적 계획법을 이용해 문제를 푸는 방법을 완전히 이해하고싶다.
간결하고 가독성 좋은 코드를 만들고 싶은 생각은 끝이 없는 것 같다.
class Solution {
public int solution(int num) {
int answer = 0;
answer=Collatz((long)num, answer);
// long형으로 바꿔야하는 이유가 있는데, 큰 숫자가 홀수로 나올경우
// int의 범위를 넘어버려, 오버플로우가 되버린다.
return answer;
}
public int Collatz(long num, int answer){
if(num==1)
return answer;
else if(answer>=500)
// 500이상일 경우
return -1;
else if(num%2==0)
return Collatz(num/2, ++answer);
else
return Collatz((num*3)+1, ++answer);
}
}
재귀적 표현이라는게 참 말도 쉽고 구조적으로 보기는 간결하나,
생각하는 단계에서나 남이 봤을때 이해하는 단계에서나 은근히 복잡한
무언가가 있는 것 같다.
'코딩테스트' 카테고리의 다른 글
[2021-04-29] K번째 수 (0) | 2021.04.29 |
---|---|
[2020-12-01] 하샤드 수 (0) | 2020.12.01 |
[2020-11-20] 최대공약수와 최소공배수 (0) | 2020.11.20 |
[2020-11-19] 짝수와 홀수 (0) | 2020.11.19 |
[2020-11-19] 제일 작은 수 제거하기 (0) | 2020.11.19 |