https://programmers.co.kr/learn/courses/30/lessons/12947
코딩테스트 연습 - 하샤드 수
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하
programmers.co.kr
이번 문제는 한번에 풀지 못했는데, 간단한 문제였음에도 불구하고 단계를 적어보지 않고 바로 문제풀이에 들어가서 틀렸다. 간단한 문제라도 한번쯤 설계를 적어보고 개발하는 습관을 가져야겠다. 각자리의 숫자를 추출하려면 각 자리 단위로 나눠야 하는데, 매번 10으로 나누어서 문제가 풀리지 않았다.
기억할 메소드는 Math.log10(x), Math.pow(x,y)로
앞 메소드는 밑이 10인 로그를 씌우는 메소드,
뒤 메소드는 x의 y제곱을 구하는 메소드.
// 내 코드
class Solution {
public boolean solution(int x) {
int init = x;// 입력받은 값
int length = (int)(Math.log10(x)+1);// 입력받은 값의 자릿수
System.out.println("length: "+length);
int sum =0;
for(int i=0; i<length-1; i++){// 4자리(1000)이면 3번해보기
System.out.println("더하기 전의 sum: "+sum);
sum+=x/Math.pow(10, length-1-i);//각 자릿수 추출
System.out.println("더한 후의 sum: "+sum);
x=(int)(x%Math.pow(10, length-1-i));// 자릿수 추출후 나머지값으로 변경
System.out.println("입력값: "+x);
}
sum+=x;// 마지막의 값 더하기
boolean answer = true;
if(init%sum==0){
return answer;
}
else{
answer = false;
}
return answer;
}
}
public class HarshadNumber{
public boolean isHarshad(int num){
String[] temp = String.valueOf(num).split("");
int sum = 0;
for (String s : temp) {
sum += Integer.parseInt(s);
}
if (num % sum == 0) {
return true;
} else {
return false;
}
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
public static void main(String[] args){
HarshadNumber sn = new HarshadNumber();
System.out.println(sn.isHarshad(18));
}
}
추천을 많이 받은 코드의 특징은 입력받은 수를 문자열로 변환하여 각 자릿수를 따로따로 나누고, 다시 int로 변환해서 합을 구하는 방식을 취했다.
특이한 코드는 String[] temp = String.valueOf(num).split("");부분으로 이렇게 처리하면 각 인덱스마다 숫자, 한글, 영문자가 하나씩 들어간다.->원리를 확인해볼 것
'개발 > 프로그래머스' 카테고리의 다른 글
제일 작은 수 제거하기 (0) | 2021.08.19 |
---|---|
최대공약수, 최소공배수(유클리드호제법) (0) | 2021.08.19 |
콜라츠 추측 (0) | 2021.08.16 |
x만큼 간격이 있는 n개의 숫자 (0) | 2021.08.16 |
행렬의 덧셈 (0) | 2021.08.16 |