https://programmers.co.kr/learn/courses/30/lessons/12947
코딩테스트 연습 - 하샤드 수
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하
programmers.co.kr
하샤드 수
이번 문제는 /와 % 의 적절한 조화를 원하는 문제로 판단된다.
문제 설명
양의 정수 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 의자 리수부터 반대로 입력되기에 원하는 위치에 저장하기 위해서 LinkedList 클래스를 이용하여 push 하면 정배열로 저장된다.
- 마지막에 나눠서 떨어지는 숫자로 판단하여 true / false로 출력한다.
import java.util.LinkedList;
class Solution {
public boolean solution(int x) {
LinkedList<Integer> ll = new LinkedList<Integer>();
int[] temp = new int[2];
temp[1] = x;
while(x>0){
ll.push(x%10);
x /= 10;
}
for(int i : ll)
temp[0] += i;
if(temp[1] % temp[0] == 0)
return true;
else
return false;
}
}
LinkedList에 대하여 아래와 같이 정리했다.
2023.02.21 - [프로그래밍/JAVA 프로그래밍] - Java - LinkedList
첫째로 temp 배열을 선언하여 0번째에는 이제 하샤드로 나눠야 하는 숫자,
1번째에는 원래의 값을 저장하게 했다.
while(x>0){
ll.push(x%10);
x /= 10;
}
우선 LinkedList인 ll에 push로 10을 나눈 값 (즉 1의 자릿수)를 push 해줍니다.
그리고 x의 값을 10으로 나눠서 몫을 넣어줬습니다. (1의 자릿수를 저장했기 때문에)
이걸 끝까지 반복하게 되고 해당 1의 자리 값을 더해줌으로써 하샤드 수에서 나눠야 하는 숫자를 가져온다.
for(int i : ll)
temp[0] += i;
전부 더해주고, 마지막에 전체 값에서 나머지가 0일 경우 true / 아닐 경우 false를 반환해줌으로써 알고리즘 테스트를 마쳤다.
채점을 시작합니다.
정확성 테스트
테스트 1 〉 |
통과 (0.19ms, 75.3MB) |
테스트 2 〉 |
통과 (0.26ms, 78.5MB) |
테스트 3 〉 |
통과 (0.19ms, 77.2MB) |
테스트 4 〉 |
통과 (0.20ms, 76.1MB) |
테스트 5 〉 |
통과 (0.18ms, 73MB) |
테스트 6 〉 |
통과 (0.18ms, 74.5MB) |
테스트 7 〉 |
통과 (0.23ms, 81.6MB) |
테스트 8 〉 |
통과 (0.21ms, 86.9MB) |
테스트 9 〉 |
통과 (0.23ms, 77.7MB) |
테스트 10 〉 |
통과 (0.18ms, 72.8MB) |
테스트 11 〉 |
통과 (0.19ms, 74MB) |
테스트 12 〉 |
통과 (0.17ms, 72.9MB) |
테스트 13 〉 |
통과 (0.19ms, 75.8MB) |
테스트 14 〉 |
통과 (0.18ms, 76.4MB) |
테스트 15 〉 |
통과 (0.18ms, 73MB) |
테스트 16 〉 |
통과 (0.19ms, 75.7MB) |
테스트 17 〉 |
통과 (0.18ms, 76.3MB) |
채점 결과
정확성: 100.0
합계: 100.0 / 100.0