Coding Test/Java Coding Test
[프로그래머스 / 자바] - 하샤드 수
nam_ji
2024. 1. 16. 10:09
하샤드 수
문제
- 양의 정수 x가 매개변수로 주어집니다.
- x가 하샤드 수라면 true를 아니라면 false를 출력하는 문제입니다.
- 하샤드 수는 x로 예를 들면 x의 각 자릿수의 합으로 x가 나누어지는 수를 말합니다.
테스트(이클립스)
- 각 자릿수의 합을 담을 변수 sum을 선언합니다.
- x의 각 자릿수를 구하기 위해 while문을 사용했습니다
- while문 안에는 sum 변수에 x를 10으로 나눈 나머지를 담아서 더하게 했습니다.
- 그 밑에 x를 10으로 나눈 몫을 담도록 하였습니다.
- 계산해보면
첫번째 while문 결과는 sum = 2, x는 1을 담게 됩니다.
두번째 while문 결과는 sum = 3, x는 0을 담기 때문에 while문이 정지하게 됩니다. - 그 값을 이용하여 x를 sum으로 나눠서 0이 되면 true를 아니라면 false를 출력하게 했지만 원하는 결과가 나오지 않아 왜 그럴까 하고 봤더니 x를 나눈 몫을 계속 담다 보면 나중에는 0을 담고 있게 됩니다. 그럼 마지막에 x 나누기 sum은 0과 sum을 나누게 되기 때문에 원하는 결과가 나오지 않았던 것입니다.
- 그래서 변수 a를 만들어 여기에 x를 담고 while문에서는 a를 이용하여 sum을 구하고 마지막 연산식은 x를 이용하여 문제를 해결했습니다.
package com.namji.codingtest.level0;
public class HarshadNumber {
public static void main(String[] args) {
/*
* 양의 정수 x가 매개변수로 주어집니다.
* x가 하샤드 수라면 x의 자릿수 합으로 x가 나누어져야 합니다.
* ex) 18은 자릿수합 = 1+8 = 9 -> 18 / 9 를
* 했을 때 나누어 떨어지기 때문에 18은 하샤드 수 입니다.
* x가 하샤드 수인지 true / false로 출력하는 문제입니다.
* 10 > true / 12 > true / 11 > false / 13 > false
*/
int x = 13;
int a = x;
int sum = 0;
while (a > 0) {
sum += a % 10;
a /= 10;
}
System.out.println((x%sum)==0 ? true : false);
// if ((a % sum) == 0) {
// System.out.println(true);
// } else {
// System.out.println(false);
// }
}
}
프로그래머스 코드
class Solution {
public boolean solution(int x) {
int a = x;
int sum = 0;
while (a > 0) {
sum += a % 10;
a /= 10;
}
return (x%sum)==0 ? true : false;
}
}