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

2022. 10. 1. 12:44·📂 Backend Engineering
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
반응형
저작자표시 비영리 변경금지 (새창열림)

'📂 Backend Engineering' 카테고리의 다른 글

[JPA]즉시로딩과 지연로딩은 언제 사용할까? (feat. 프록시)  (0) 2022.12.27
[SQL] AES 전화번호 복호화시 [blob] 문제 해결하기  (0) 2022.11.16
[JAVA] Super() 키워드 예제 / Super 부모, 자식  (2) 2022.09.09
[JAVA] 헷갈렸던거 정리(static, 생성자, 기본생성자, 초기화)  (2) 2022.09.09
[JPA] JPA의 OSIV란? OSIV 적용예제, OSIV 성능최적화 방법  (0) 2022.08.29
'📂 Backend Engineering' 카테고리의 다른 글
  • [JPA]즉시로딩과 지연로딩은 언제 사용할까? (feat. 프록시)
  • [SQL] AES 전화번호 복호화시 [blob] 문제 해결하기
  • [JAVA] Super() 키워드 예제 / Super 부모, 자식
  • [JAVA] 헷갈렸던거 정리(static, 생성자, 기본생성자, 초기화)
foodev
foodev
이것저것 개발과 이것저것 리뷰 합니다.
    반응형
    250x250
  • foodev
    개발 개맛집
    foodev
  • 전체
    오늘
    어제
    • 분류 전체보기 (104) N
      • ⭐ Featured (4)
      • 📂 Backend Engineering (36)
      • 📂 Troubleshooting & Ops (10)
      • 📂 Infra & System (7) N
      • 📂 Reflections (21)
        • Year-in-Review (5)
        • Work & Career (10)
        • Lessons Learned (6)
      • 📂 Team Journal (10)
      • 📂 Archive (16)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바