콜라츠 추측 함수로 쪼개어 풀어보기

2022. 10. 1. 12:44·💻 개발/알고리즘
728x90
반응형
🌌프로그래머스 콜라츠 구하기 - 자바(java)

함수로 풀어보기 

📚 문제 설명

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

1-1. 입력된 수가 짝수라면 2로 나눕니다. 
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. 

예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요.

제한 사항
  • 입력된 수, num은 1 이상 8,000,000 미만인 정수입니다.
입출력 예nresult
6 8
16 4
626331 -1
입출력 예 설명

입출력 예 #1
문제의 설명과 같습니다.

입출력 예 #2
16 → 8 → 4 → 2 → 1 이 되어 총 4번 만에 1이 됩니다.

입출력 예 #3
626331은 500번을 시도해도 1이 되지 못하므로 -1을 리턴해야 합니다.


작성코드 

class Solution {
      // 1. 짝수 홀수 구분 하는 함수 
    public boolean isEvenNumber(long num) {
        return num % 2 == 0;
    }
    
    // 2. 2로 나누는 함수
    public long afterEvenNumber(long num) {
        return num / 2;
    }
    
    // 3. 3을 곱하고 1을 더하는 함수
    public long afterOddNumber(long num) {
        return num * 3 + 1;
    }
    
    // 4. 그 다음 숫자 리턴하는 함수 
    public long afterNumber(long num) {
        if(isEvenNumber(num)) {
            return afterEvenNumber(num);
        } else {
            return afterOddNumber(num);
        }
    }
    
    public int solution(long num) {              
        if(num == 1) {
            return 0;
        } 
                
        for(int cnt = 1; cnt <= 500; cnt++) {            
            num = afterNumber(num);                         
            if(num == 1) {
                return cnt;
            }             
        }
        return -1;
        

    }
}
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'💻 개발 > 알고리즘' 카테고리의 다른 글

[문제분석/해석] n-puzzle 최소이동 횟수 알고리즘 구하기(이미지 추가)  (1) 2023.04.15
[프로그래머스 Level1] k번째 수 구하기 - 자바(java) | 정렬  (0) 2022.06.08
[프로그래머스 Level2] 전화번호 목록 - 자바(java) | 해쉬 사용  (0) 2022.06.05
[프로그래머스 Level1] 완주하지 못한 선수 - 자바(Java) | 해시 사용하기  (0) 2022.06.04
[프로그래머스Level1] 핸드폰 번호 가리기 - 자바(java)  (0) 2022.06.04
'💻 개발/알고리즘' 카테고리의 다른 글
  • [문제분석/해석] n-puzzle 최소이동 횟수 알고리즘 구하기(이미지 추가)
  • [프로그래머스 Level1] k번째 수 구하기 - 자바(java) | 정렬
  • [프로그래머스 Level2] 전화번호 목록 - 자바(java) | 해쉬 사용
  • [프로그래머스 Level1] 완주하지 못한 선수 - 자바(Java) | 해시 사용하기
foodev
foodev
이것저것 개발과 이것저것 리뷰 합니다.
    반응형
    250x250
  • foodev
    개발 개맛집
    foodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (109)
      • 🌟🙇🏻‍♂️ 꼭 읽어봤으면 하는 글 (4)
      • 💻 개발 (72)
        • 설정 및 세팅 (4)
        • DB&서버&네트워크&암호 (11)
        • React (0)
        • JPA, Querydsl (13)
        • 알고리즘 (7)
        • 언어 (15)
        • 프레임워크 (12)
        • HTML, CSS (10)
      • ✍🏻 (33)
        • 회고록 (15)
        • 독서록 (7)
        • 일지록 (10)
        • 세미나 (1)
      • 💡 리뷰 (0)
        • 제품리뷰 (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    nestjs pipe
    해피해킹 커스텀
    di의존성
    di란
    db 초기화
    스냅샷과히스토리성 차이
    스냅샷방식
    디비스냅샷
    해피해킹 키매핑
    di동작원리
    githubaction 라벨 배포
    해피해킹 꿀팁
    nestjs pipe body
    스냅샷과로그성
    typedi 동작원리
    db 날림
    서이추
    validation failed (numeric string is expected)
    githubaction 라벨 ci/cd
    토이프로젝트개발일지
    스냅샷과 히스토리
    해피해킹 방향키
    typedi란
    해피해킹 카라비너
    db 날린 썰
    성능최적화 다양한 방법
    JPA
    QueryDSL
    azure ci/cd
    창업패키지후기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
foodev
콜라츠 추측 함수로 쪼개어 풀어보기
상단으로

티스토리툴바