프로그래머스 코딩(자바)/Level 1
Programmers Level 1 - 하샤드 수
kjwc
2023. 3. 9. 09:06
728x90
문제 설명
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
제한 조건
- x는 1 이상, 10000 이하인 정수입니다.
입출력 예
arr | return |
10 | true |
12 | true |
11 | false |
13 | false |
입출력 예 설명
입출력 예 #1
10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.
입출력 예 #2
12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다.
입출력 예 #3
11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다.
입출력 예 #4
13의 모든 자릿수의 합은 4입니다. 13은 4로 나누어 떨어지지 않으므로 13은 하샤드 수가 아닙니다.
1
2
3
4
5
6
7
8
9
10
11
12
|
class Solution {
public boolean solution(int x) {
boolean answer = true;
int sum=0, temp = x;
while(temp>0) {
sum += temp%10;
temp/=10;
}
answer = x%sum==0;
return answer;
}
}
|
cs |
문제의 핵심은 "하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다" 입니다. 일단 각각의 자리수의 합을 구해서 x를 합으로 나눈 나머지가 0인지 판단하면 되는군요 각각의 자리수의 합을 구하는것은 이전 문제에서 많이 해본듯.... |
1
2
3
4
5
6
7
8
9
|
import java.util.Arrays;
class Solution {
public boolean solution(int x) {
return x % Arrays.stream(("" + x)
.split(""))
.mapToInt(v -> v.charAt(0) - '0')
.sum() == 0;
}
}
|
cs |
각가의 자리수의 합을 구하는 방법 x를 문자열로 만들고 1글자씩 잘라내여 String 배열로 만들고 mapToInt를 이용하여 IntStream으로 변환후 sum()으로 합계를 구한다. x를 합으로 나눈 나머지가 0인지 판단한다. 끝~~~~ |
1
2
3
4
5
6
7
|
class Solution {
public boolean solution(int x) {
return x % ("" + x).chars()
.map(v -> v - '0')
.sum() == 0;
}
}
|
cs |
String을 IntStream으로 만들어 주는 chars()를 사용해도 되는데 이때 value 값이 ASCII코드 값이므로 map을 이용하여 숫자로 바꿔줘야 합니다. 이전에 설명 했지만 '1' - '0' = 49 - 48 = 1 '2' - '0' = 50 - 48 = 2 이 방법을 이용하면 1자리 문자 양수를 쉽게 숫자로 변경 가능합니다. |
728x90