알고리즘 문제 21번- 하샤드 수
일단 문제는
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
class Solution {
public boolean solution(int x) {
boolean answer = false;
String str_x = String.valueOf(x);
int str_sum = 0;
for (int i = 0; i < str_x.length(); i++) {
str_sum += Integer.parseInt( str_x.substring(i,i+1));
}
if(x % str_sum == 0){
answer = true;
}
return answer;
}
}
먼저 내가 푼 방법은 x를 문자형으로 변경한뒤 반복문으로 문자 길이만큼 작업하며,substring()을 이용해서 문자 한개씩 자르도록하고 Integer형으로 변환 시키고 str_sum에 다 더하도록 했다.
그후 x를 str_sum으로 나눈 나머지를 체크해서 풀었다.
다 풀고 채점후 좋아요 많은 다른 사람 풀이 보니깐 다른 사람은 split()을 이용해서 풀었는데 코드의 채점 시간을 비교해보니 내가 푼 방법은 0.0x ms대인데 밑에 풀이 방법은 0.1x ms대였다.
class Solution {
public boolean solution(int x) {
boolean answer = false;
String[] str_x = String.valueOf(x).split("");
int str_sum = 0;
for (String s : str_x) {
str_sum += Integer.valueOf(s);
}
if(x % str_sum == 0){
answer = true;
}
return answer;
}
이 문제는 자바로 먼저 해보고 그다음 파이썬으로 해봤는데
역시 파이썬으로 코딩 문제 푸는게 젤 좋은듯...
def solution(x):
answer = False
if x % sum( int(i) for i in str(x)) == 0:
answer = True
return answer