프로그래머스에서 제공되는 Level1문제 중 하샤드 수이다.
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
- x는 1이상, 10000 이하인 정수이다.
- arr=10 --> return == true
- arr=12 --> return == true
- arr=11 --> return == false
- arr=13 --> return == false
문제를 처음 봤을 때 좋은 아이디어 떠오르지 않았다. 그래서 x가 10000이하라는 제한 조건을 이용해서 if문을 통해 x의 범위에 찾고 x의 각 자릿수를 구해 그 합을 x로 나눴을 때 나머지를 구했다.
import java.util.Scanner;
public class hashad {
public boolean hashadAnswer(int x) {
boolean answer = true;
//x는 10000이하인 수이므로 각 자릿수를 나타내는 변수가 적어도 4개는 필요하다
int i, j = 0;
int z, y, sum = 0;
//x가 한 자리 수일 때
if (x >= 1 && x <= 10) {
answer = true;
}
//x가 두 자리 수일 때
else if (x >= 11 && x <= 99) {
i = x / 10;
j = x % 10;
sum = i + j;
if (x % sum == 0) {
answer = true;
} else
answer = false;
}
//x가 세 자리 수일 때
else if (x >= 100 && x <= 999) {
i = x / 100;
j = (x % 100) / 10;
z = (x % 100) % 10;
sum = i + j + z;
if (x % sum == 0) {
answer = true;
} else
answer = false;
}
//x가 네 자리 수일 때
else if (x >= 1000 && x <= 10000) {
i = x / 1000;
j = (x % 1000) / 100;
z = ((x % 1000) % 100) / 10;
y = ((x % 1000) % 100) % 10;
sum = i + j + z + y;
if (x % sum == 0) {
answer = true;
} else
answer = false;
} else {
System.out.println("1이상 10000이하인 정수를 입력해주시기 바랍니다.");
answer = false;
}
return answer;
}
public static void main(String[] args) {
while (true) {
hashad h = new hashad();
Scanner stdin = new Scanner(System.in);
int arr = stdin.nextInt();
System.out.println(h.hashadAnswer(arr));
if(arr == 0) break;
}
}
}
코드를 보면 딱 봐도 엄청 더럽다... 그래서 다른 분들은 이 문제를 어떻게 풀었는지 살펴보았는데 정말 감탄할만한 아이디어로 푼 분이 계셔서 그 분의 코드를 첨부한다.
import java.util.Scanner;
public class hashad_other {
public boolean isHarshad(int num) {
String[] temp = String.valueOf(num).split("");
int sum = 0;
for (String s : temp) {
sum += Integer.parseInt(s);
}
if (sum > 0) {
if (num % sum == 0) {
return true;
} else {
return false;
}
} else
return false;
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
public static void main(String[] args) {
hashad_other sn = new hashad_other();
Scanner stdin = new Scanner(System.in);
int arr = stdin.nextInt();
System.out.println(sn.isHarshad(arr));
}
}
split("")로 x의 각 자릿수 값을 구하는 방법이다.
Integer형인 x를 String형으로 바꾸고 split함수로 쪼갠다.
split함수의 사용법에 관한 글을 첨부한다 참고
그 다음, Integer.parseInt()로 String형을 Integer로 형 변환 시켜준다.
parseInt의 사용법이다. 참고
아직 형변환과 Java에서 제공하는 기본 라이브러리, 함수들에 익숙하지 않다ㅜㅜ
이래서는 내 주언어가 Java라고 어디가서 말도 못할 듯..
당분간은 쉬운 문제 위주로 풀어가면서 이렇게 기본적인 것들을 먼저 익혀야겠다.