콜라츠 추측

2018. 12. 27. 12:37· Algorithm
목차
  1. 문제
  2. 풀이
  3. 소스 코드

문제

1937년 Collatz란 사람에 의해 제기된 이 추측은, 입력된 수가 짝수라면 2로 나누고, 홀수라면 3을 곱하고 1을 더한 다음, 결과로 나온 수에 같은 작업을 1이 될 때까지 반복할 경우 모든 수가 1이 된다는 추측입니다. 예를 들어, 입력된 수가 6이라면 6→3→10→5→16→8→4→2→1 이 되어 총 8번 만에 1이 됩니다. collatz 함수를 만들어 입력된 수가 몇 번 만에 1이 되는지 반환해 주세요. 단, 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요.

풀이

문제 자체는 어렵지 않았다. 이름은 생소하지만 사실 문제에 공식이 다 나와있어 구현만 하면 되는데

한가지 주의할 점은 19라인이다. 이 부분을 빼면 정답이 아니라고 나오는데 입력된 수가 만약 큰 수라면 int의 범위를 넘어가게 되어

정확한 값이 나오지 않을 수 있다. 따라서 그 부분에 대한 처리를 통해 return 분기를 하나 더 생성해줘야 한다.

제출하고 든 생각인데 굳이 저렇게 2147... 이렇게 안쓰고 그냥 계산 결과가 마이너스이면 리턴하도록 해도 될 것 같다...

소스 코드

#include <iostream>
using namespace std;

int collatz(int num)
{
  int answer = 0;

  /* 구현 시작부 */
  int MAX = 500;
  for (answer; answer < MAX; answer++)
  {
    if (num == 1)
      break;
    else if (num % 2 == 0)
    {
      num = num / 2;
    }
    else
    {
      if (num * 3 + 1 > 2147483647)
        return -1;
      num = num * 3 + 1;
    }
  }
  if (answer == MAX)
  {
    answer = -1;
  }
  /* 구현 종료부 */

  return answer;
}

int main()
{
  int testCase   = 4654114;
  int testAnswer = collatz(testCase);

  cout << testAnswer;
}

알고리즘 문제 Level 2 | 프로그래머스

저작자표시 동일조건

'Algorithm' 카테고리의 다른 글

행렬의 곱셈  (0) 2018.12.27
2016년 요일 구하기  (0) 2018.12.27
소수 찾기 - 에라토스테네스의 체  (0) 2018.12.27
최솟값 만들기 알고리즘  (0) 2018.12.27
최소공배수 최대공약수  (0) 2018.06.22
  1. 문제
  2. 풀이
  3. 소스 코드
'Algorithm' 카테고리의 다른 글
  • 행렬의 곱셈
  • 2016년 요일 구하기
  • 소수 찾기 - 에라토스테네스의 체
  • 최솟값 만들기 알고리즘
lasiyan
lasiyan
소프트웨어 개발 블로그
lasiyan
LA Dev.
lasiyan
전체
오늘
어제
  • All (85)
    • Modern C++ (3)
      • STL Container (2)
    • Language (14)
      • C++ (13)
      • Python (1)
    • A.I (4)
    • Algorithm (37)
    • Vision (7)
    • System (4)
    • Application (3)
    • Undefined (11)
    • 일상 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • C
  • 리눅스
  • 소프트웨어개론
  • 표준입출력
  • mfc
  • 코딩테스트
  • stl
  • yolo
  • c++
  • 알고리즘
  • 딥러닝
  • 영상처리
  • Python
  • JETSON
  • dll
  • 컨테이너
  • container
  • 프로그래머스
  • 파이썬
  • 윈도우 프로그래밍

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
lasiyan
콜라츠 추측
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.