Using Language : Java
Using Tool : IntelliJ
- 프로그래머스 문제 소개
<하샤드 수>
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
자연수 n을 입력받아 n이 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
예시
arr return
10 true
12 true
11 false
13 false
의사코드
- int 형을 string문자열로 변환해준다. ( 각 자릿수를 합하기 위해)
- 각 자릿수의 합을 구해준다
- 합으로 주어진 숫자를 나누어준다.
코드 작성 및 테스트 결과
int형에서 string형으로 변환하는 함수를 찾는데 시간이 좀 걸렸으나 나머지 과정은
무난히 패스. 이제 1단계를 졸업한 날이 온 것 같다.
다음 포스팅 부터는 2단계 문제로~!
<Solution10.java> , <Solution10Test.java>
package level1;
public class Solution10 {
/*
* 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
* 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
* 자연수 n을 입력받아 n이 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
*
* arr return
10 true
12 true
11 false
13 false
1. int 형을 string 문자열로 변환
2. 각 자릿수의 합을 구하기
3. 합으로 주어진 숫자를 나누어준다.
*/
public boolean solution(int x) {
int sum = 0;
boolean answer = true;
String num = String.valueOf(x);
int len = num.length();
sum = getSum(sum, num, len);
return isAnswer(x, sum, answer);
}
private boolean isAnswer(int x, int sum, boolean answer) {
if (x % sum == 0) {
return answer;
}
else {
answer = false;
return answer;
}
}
private int getSum(int sum, String num, int len) {
for (int i = 0; i < len; i++) {
sum += Integer.parseInt(num.substring(i,i+1));
}
return sum;
}
}
package level1;
import org.junit.Test;
import static org.junit.Assert.*;
public class Solution10Test {
@Test
public void solution() {
Solution10 s = new Solution10();
assertTrue("true",s.solution(10));
assertTrue("true",s.solution(12));
assertFalse("false",s.solution(11));
assertFalse("false",s.solution(13));
}
}