본문 바로가기
Tech/Algorithm

프로그래머스)level.1_하샤드 수

by 소라소라잉 2019. 4. 3.

문제 설명

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

 

제한 조건

  • x는 1 이상, 10000 이하인 정수입니다.

입출력 예

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; int sum = 0;
int y = x;
while(x > 0) {
sum += x%10;
x /= 10;
}
System.out.println(sum);

if(y%sum ==0) answer = true;
else answer = false;
return answer;
}
}

while 반복문 안에 x를 10으로 나누고 나머지를 sum에 차곡차곡 더해주면 결국 각 자릿수를 합한 값이 sum에 저장된다.

위의 if문은 if(y%sum ==0 ? answer : !answer)  이런식으로 쓴 친구가 더 빨랐다. (왜그런진 모르겠지만...) 

 

 

< 다른 사람의 풀이 > 

public class HarshadNumber{
public boolean isHarshad(int x){

String[] temp = String.valueOf(x).split("");

int sum = 0;
for (String s : temp) {
sum += Integer.parseInt(s);
}

if (x % sum == 0) {
return true;
} else {
return false;
}
}

String[] temp = String.valueOf(num).split("");

x의 값을 split을 이용해 String 배열 temp에 문자열로 넣어주고 

이후 for문을 통해 temp길이만큼 반복문을 돌리며 sum에 합산해주었다.

향상된 for문(for-each문)은 매번 보기만 하고 써본적이 한번도 없는데 자주 써봐야겠다. 

 

String.valueOf(x).split("");

이건 몇주전 우아한테크코스 코딩테스트 연습할때 한번 보고 거들떠도 안봤는데 상당히 유용하게 잘 쓰이는 메소드인듯 싶다. 자주 활용해 봐야지 

 

 

댓글