'하샤드 수' 정의는 다음과 같다.
양의 정수 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은 하샤드 수가 아닙니다.
위 문제는 입력 받은 정수값의 자릿수의 합을 구하면 풀어낼 수 있다.
다음과 같이 코드를 작성했다.
class Solution {
public boolean solution(int x) {
boolean answer = false;
String strX = Integer.toString(x);
int sumDigit = 0;
int length = strX.length();
for (int i = 0; i < length; i++) {
sumDigit += strX.charAt(i) - '0';
}
if ((x % sumDigit) == 0) {
answer = true;
}
return answer;
}
}
입력 받은 정수값을 스트링으로 변환하여 저장하고, 스트링 각 원소 값에 '0'을 빼 자릿수 합을 구했다.
'0'을 빼는 것은 아스키 코드를 참조하면 알 수 있다.
String.chatAt(index) 메소드는 스트링에서 index에 해당하는 값을 char형으로 반환한다.
만일 첫 번째 index에 해당하는 값이 '7'일 경우, 10진수 값은 55다.
'7' - '0'의 값은 10진수로 55 - 48 = 7이 된다. 결국, 문자가 숫자일 경우에 '0'을 빼주면 해당하는 정수값을 얻을 수 있다.
Feedback
1. x % sum == 0을 조건문을 이용해 검사하고 값을 answer에 담고나서 반환해야 하는가?
2. 스트링보다는 정수만을 이용해 처리해 보는것은 어떨지?
피드백을 반영하여 다음과 같이 새로 작성했다.
class Solution {
public boolean solution(int x) {
int temp = x;
int sum = 0;
while(temp > 0){
sum += temp % 10;
temp /= 10;
}
return x % sum == 0;
}
}
1. x % sum == 0을 조건문을 이용해 검사하고 값을 answer에 담고나서 반환해야 하는가?
x % sum == 0 자체가 boolean 값을 반환하기 때문에 return에 직접 작성해준다.
2. 스트링보다는 정수만을 이용해 처리해 보는것은 어떨지?
입력된 값이 9288라고 가정해보자.
sum += temp % 10;
= 입력된 값에 최하위 자릿수 값을 구한다. (몫은 928, 나머지는 8이기 때문에 sum에는 8이 더해진다.)
temp /= 10;
= 최하위 자릿수를 제외한다. (temp에는 928이 저장된다.)
temp의 값이 0보다 크면 위 로직을 반복한다. 그러면 다음과 루프 횟수별로 같은 값을 얻을 수 있다.
1 : 8
2 : 8
3 : 2
4 : 9
최종적으로 sum의 값은 27이 되며 9288은 27로 나누어 떨어져 true를 반환하게 된다.
'Coding Test > Others' 카테고리의 다른 글
[Algorithm] 소수 만들기 (0) | 2020.11.10 |
---|---|
[Algorithm] 영어 끝말잇기 (1) | 2020.10.15 |
[Algorithm] 수포자 (0) | 2020.10.14 |
[Algorithm] 방문 길이 (0) | 2020.10.14 |
[Algorithm] 다음 큰 숫자 (0) | 2020.08.24 |