코딩 테스트 문제/프로그래머스

콜라츠 추측

J520 2018. 9. 17. 18:45

문제




 이 프로그램은 어떤 숫자를 일련의 작업을 통해 1로 만드는 데에 걸리는 횟수를 결과로 보인다. 일련의 작업이란, 짝수라면 2로 나누고, 홀수라면 3을 곱하고 1을 더한다. 이 두 작업을 입력된 수가 1 이 될 때 까지 반복하고, 작업을 반복한 횟수를 반환한다. 단, 작업을 반복한 횟수가 500번을 넘어간다면, -1을 반환한다. 






실행 결과 1:

 16을 입력했을 때의 실행 결과이다.



실행 결과 2:

 626331을 입력했을 때의 실행 결과 이다.

 이 입력은 문제가 있었다. 입출력 예제에서는 626332를 입력하라고 했는데, 출력은 500에 한참 미치지 못하는 110이 나왔다. 그래서 뭔가 잘못되었구나-하고 코드를 열심히 살펴봤다. 그러다가 입출력 예 설명 부분을 봤더니, 입력 626331에 대한 설명이 써져 있었다. 입력이 잘못되었던 것이구나- 싶어서 들뜬 마음으로 626331을 입력했다. 그랬더니 이번에는 카운트가 488이 나왔다. 또 뭔가 잘못되었구나-하고 코드를 열심히 살펴봤다. 그런데 알고 보니 입력 자체가 잘못되었다고 하는 것이다. 그러니까, 입력 626331에 대한 출력은 488이 맞다는 것이다...사람은 코딩을 배우며 겸허함도 배운다는 것을 깨달았다.



실행 결과3 :

 위 실행에서의 -1 리턴 기준은 카운트 500이었다. 그런데 실행 결과2 에서 언급했던 것처럼, 입력 626331에 대한 카운트(출력)가 488이 나오길래, 기준(answer)을 480으로 잡아 보았다. 그랬더니 의도대로 -1 이 출력 되었다.



 이번 문제는 신기했다. 콜라츠 추측이라는 개념을 몰랐기 때문에, 이번 문제를 통해 새로운 것을 알게 되었다는 것에 대해 기뻤다. 다만, 문제에 실수가 있을 것이라는 생각은 해보지 않았기에 의외였다. 더불어 이제까지 문제에 대해 맹목적인 신뢰를 보냈다는 것을 깨달았다. 마치 선생님의 말씀을 세상의 진리처럼 받아들이는 어린아이처럼 말이다.

 문제를 풀며 콜라츠라는 사람이 뭐 하는 사람인가 궁금해서 조금 찾아보았다.(그가 꽤 한가한 사람일 것 같다는 무례한 생각을 떨쳐버리고 싶었기 때문이다.) 로타르 콜라츠는 1910년에 태어난 독일의 수학자라고 한다. 그리고 예상 외로 콜라츠 추측은 수학계에서 충격과 공포의(?) 문제라고 하는 것 같다. 문제를 이해하기는 쉽지만, 그 증명 방법이 몹시 난해하다고 한다. 수많은 수학자들을 무릎 꿇게 한 난제라고, 언뜻 살펴본 나무 위키와 위키 백과에서 설명하고 있었다. 무식하면 용감하다고 하더니, 감히 그를 한가한 사람이라고 잠시라도 생각했던 것이 몹시 부끄럽다. 겸손하게 살자고 새삼 다짐했다.





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



'코딩 테스트 문제 > 프로그래머스' 카테고리의 다른 글

제일 작은 수 제거하기  (0) 2018.09.17
하샤드 수  (0) 2018.09.17
서울에서 김서방 찾기  (0) 2018.09.15
이상한 문자 만들기  (0) 2018.09.15
완주하지 못한 선수  (0) 2018.09.14