https://programmers.co.kr/learn/courses/30/lessons/12943
코딩테스트 연습 - 콜라츠 추측
1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다. 1-1. 입력된 수가 짝수라면 2
programmers.co.kr
테스트 코드
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class Quiz1_콜라츠추측Test {
Quiz1_콜라츠추측 q;
@BeforeEach
void setUp() throws Exception {
q = new Quiz1_콜라츠추측();
}
@Test
void test1() {
assertEquals(0 ,q.solution(1));
}
@Test
void test6() {
assertEquals(8,q.solution(6));
}
@Test
void test16() {
assertEquals(4,q.solution(16));
}
@Test
void test626331() {
assertEquals(-1,q.solution(626331));
}
// @Test
// void test7999999() {
// fail("Not yet implemented");
// }
// 최댓값쪽은 계산하는게 어려워서 케이스 빼자.
}
public class Quiz1_콜라츠추측 {
int numberOfStep = 0;
public int solution(int num) {
if(num==1) {
return 0;
}
proceedStep((long) num);
if(numberOfStep==500) {
return -1;
}
return numberOfStep;
}
public void proceedStep(long num) {
if(num%2==0) {
num/=2;
}
else{
num*=3;
num+=1;
}
numberOfStep++;
if(numberOfStep==500) {
return;
}
if(num==1) {
return;
}
proceedStep(num);
}
}
// 범위 최소, 최대는 가능하다면 테스트 케이스에 넣어주자.
// else 안쓸수있는 방법이 있을까?
public class Quiz1_콜라츠추측 {
int numberOfStep = 0;
public int solution(int num) {
if(num==1) {
return 0;
}
proceedStep((long) num);
if(numberOfStep==500) {
return -1;
}
return numberOfStep;
}
public void proceedStep(long num) {
if(num%2==0) {
num/=2;
numberOfStep++;
if(numberOfStep==500) {
return;
}
if(num==1) {
return;
}
proceedStep(num);
return;
}
if(num%2!=0) {
num*=3;
num+=1;
numberOfStep++;
if(numberOfStep==500) {
return;
}
if(num==1) {
return;
}
proceedStep(num);
return;
}
}
}
//가능하긴하다. 더 복잡해 보이는데 왜 이게 더 좋은 코드인가? 왜 else를 못쓰게 하는거지?
//if블록 내에서 return을 할 경우, else블록이 필요없다.
//설명이 좋은 블로그가 있어서 하단에 첨부한다.
https://tecoble.techcourse.co.kr/post/2020-07-29-dont-use-else/
else 예약어를 쓰지 않는다
The ThoughtWorks Anthology의 더 나은 소프트웨어를 향한 9단계: 객체지향 생활 체조 중 규칙…
tecoble.techcourse.co.kr
'코딩테스트연습 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 - JAVA] 핸드폰 번호 가리기 (0) | 2021.11.19 |
---|---|
[프로그래머스 - JAVA] 하샤드 수 (0) | 2021.11.18 |
[프로그래머스 - JAVA] 2018 KAKAO BLIND RECRUITMENT[1차] 다트 게임 (0) | 2021.10.30 |
[프로그래머스 - JAVA] 연습문제 가운데 글자 가져오기 (0) | 2021.10.28 |
[프로그래머스 - JAVA] 위클리 챌린지1주차_부족한 금액 계산하기 (0) | 2021.10.28 |