https://programmers.co.kr/learn/courses/30/lessons/12947
//테스트 코드
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() {
assertTrue(q.solution(1));
}
@Test
void test10() {
assertTrue(q.solution(10));
}
@Test
void test12() {
assertTrue(q.solution(12));
}
@Test
void test11() {
assertFalse(q.solution(11));
}
@Test
void test13() {
assertFalse(q.solution(13));
}
}
프로덕션 코드
public class Quiz1_하샤드수 {
public boolean solution(int x) {
return checkHashad(sumOfNumber(x), x);
}
public int sumOfNumber(int x) {
if(x%10==0) {
return x;
}
return sumOfNumber(x/10) + (x%10);
}
public boolean checkHashad(int sumOfNumber, int x) {
if(x%sumOfNumber==0) {
return true;
}
return false;
}
}
// 테스트코드 통과, 히든케이스 3개 미통과. 생각하지 못한 부분이 어디있을까?
// 아이고... x%10==0 일때 바로 리턴해버리면 x=1230 일때 그대로 나가네! 수정하자.
public class Quiz1_하샤드수 {
public boolean solution(int x) {
return checkHashad(sumOfNumber(x), x);
}
public int sumOfNumber(int x) {
if(x/10==0) {
return x;
}
return sumOfNumber(x/10) + (x%10);
}
public boolean checkHashad(int sumOfNumber, int x) {
if(x%sumOfNumber==0) {
return true;
}
return false;
}
}
//굿! 이제 처음 보는 사람도 금방 이해 할 수 있도록 리팩토링 해보자.
public class Quiz1_하샤드수 {
public boolean solution(int x) {
return checkHashad(sumOfEachDigit(x), x);
}
public int sumOfEachDigit(int x) {
if(checkUnitDigit(x)) {
return x;
}
return sumOfEachDigit(x/10) + (x%10); //이름을 붙여주고 싶었으나 오히려 복잡해져서 참았다.
}
private boolean checkUnitDigit(int x) {
return x/10==0;
}
private boolean checkHashad(int sumOfNumber, int x) {
if(x%sumOfNumber==0) {
return true;
}
return false;
}
}
//정확한 명칭으로 메서드 이름을 변경하였고 의미를 직접 찾아야 하는 수식보다는 이름을 붙여줘 처음 보는 사람도 쉽게 이해할 수 있도록 하였다.
'코딩테스트연습 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 - JAVA] 행렬의 덧셈 (0) | 2021.11.20 |
---|---|
[프로그래머스 - JAVA] 핸드폰 번호 가리기 (0) | 2021.11.19 |
[프로그래머스 - JAVA] 콜라츠 추측 (0) | 2021.11.16 |
[프로그래머스 - JAVA] 2018 KAKAO BLIND RECRUITMENT[1차] 다트 게임 (0) | 2021.10.30 |
[프로그래머스 - JAVA] 연습문제 가운데 글자 가져오기 (0) | 2021.10.28 |