본문 바로가기

Algorithm

[알고리즘] #28 하샤드 수 | 프로그래머스

728x90

프로그래머스 하샤드 수 알고리즘 문제.

 

https://programmers.co.kr/learn/courses/30/lessons/12947

 

코딩테스트 연습 - 하샤드 수

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하

programmers.co.kr

 

 

 

 

 


 

 

 

문제 설명

 

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

 

 

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

 

입출력 예

 

 

 

입출력 예 설명

 

입출력 예 #1
10의 모든 자릿수의 합은 1입니다. 10은 1로 나누어 떨어지므로 10은 하샤드 수입니다.

입출력 예 #2
12의 모든 자릿수의 합은 3입니다. 12는 3으로 나누어 떨어지므로 12는 하샤드 수입니다.

입출력 예 #3
11의 모든 자릿수의 합은 2입니다. 11은 2로 나누어 떨어지지 않으므로 11는 하샤드 수가 아닙니다.

입출력 예 #4
13의 모든 자릿수의 합은 4입니다. 13은 4로 나누어 떨어지지 않으므로 13은 하샤드 수가 아닙니다.

 

 

 


 

< 문제 풀이 >

 

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

solution(x);

function solution(x) {

  // 배열로 만들기
  // 문자열을 이용해 배열 만들기 -> 배열 안의 문자 숫자로 변경
  let arr = (x + '').split('');
  arr = arr.map(cur => parseInt(cur));

  let sum = 0;

	// 배열안의 숫자의 합
  for (let index in arr){
    sum += arr[index];
  }

	// 입력값으로 합을 나누기
  return !(x%sum) ? true : false
}

 

 

반복해서 숫자를 검사하고 싶으므로 반복문을 사용한다. 반복문을 사용하기 위해서 배열로 만들어준다. 배열로 만들어주기 위해서 먼저 1. 문자열로 만들어 줌 2. 문자열을 split으로 각각 나눠 배열로 만들어줌. 이렇게 문자열이 담긴 배열이 되면, map을 사용해 arr 자체를 새로운 arr 로 만들어줄 것인데, parseInt를 사용해 숫자로 바꾼 새로운 배열로 만들어준다. 숫자가 담긴 배열이 완성되면 이제 반복문을 돌리기 시작한다. for in 문을 사용해서 간단히 index 값을 가져와서 arr[index]로 반복 사용하여 배열 안의 숫자의 합을 더해준다. 마지막으로 입력값이었던 x를 sum(배열 안의 숫자합)으로 나누어 나누어 떨어진다면 true, 아니라면 false 를 출력해준다.

 

 


 

 

 

 

 

다른 사람들은 어떻게 풀었을까?

 

https://programmers.co.kr/learn/courses/30/lessons/12947/solution_groups?language=javascript 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

728x90