Algorithm
[Algorithm] 하샤드 수
sod0l
2024. 8. 29. 10:43
1. 문제 개요
- 문제 제목: 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
- 문제 설명: 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
2. 문제 해결 전략
- 단계 1: 숫자를 스트링으로 변환 후 각 자릿수를 분리해서 배열에 저장 → toString() , split(’’) 사용
- 단계 2: 문자 열을 각각 숫자로 변환해 배열에 저장 → reduce 메서드로 누적 합 계산하기
- 단계 3: 정수 x를 배열의 합으로 나눴을 때 0이면 하샤드 수임을 출력
3. 코드 분석
function solution(x) {
// 과정 1) 숫자를 스트링으로 변환 후 각 자릿수를 분리해서 배열에 저장
var arr = x.toString().split('')
// 과정 2) 문자 열을 각각 숫자로 변환해 배열에 저장(reduce 메서드로 누적 합 계산하기)
var sum = arr.reduce((acc, curr) => acc +Number(curr), 0)
// 과정 3) 정수 x를 배열의 합으로 나눴을 때 0이면 하샤드 수임을 출력
if (x % sum === 0) {
return true; // 하샤드 수 일때 true
} else {
return false; // 하샤드 수가 아닐 때
}
}
console.log(solution(15));
console.log(solution(18));
3-1) 메소드 및 함수 설명
- 메소드/함수 이름: toString()
- 용도: 숫자열을 문자열로 변환
- 설명: 숫자를 문자열로 변환하여 각 자릿수를 분리할 수 있게 해줌
- 사용 예: 123.toString() 은 ”123” 문자열 반환한다.
- 메소드/함수 이름: split('')
- 용도: 문자열을 배열로 변환
- 설명: 문자열을 특정문자(’’ 빈 문자열)로 나누어 배열로 변환한다. 자릿수별로 분리되 문자열 형태로 변화할 수 있게 해줌
- 사용 예: 123.split('') 은 ['1', '2', '3',] 이라는 배열 생성한다.
- 메소드/함수 이름: reduce()
- 용도: 배열의 모든 요소를 누적하여 단일 값으로 계산한다.
- 설명: 배열의 각 요소를 특정 연산을 통해 누적하여 최종 결과를 생성한다. 자릿수의 합을 계산하는데 유용하다.
- 사용 예: [1, 2, 3].reduce((acc, curr) => acc + curr, 0) 은 6 을 반환한다.
- 메소드/함수 이름: Number()
- 용도: 문자열을 숫자로 변환
- 설명: 문자열 형태의 숫자를 실제 숫자 타입으로 변환하여 산술 연산을 수행할 수 있게 한다.
- 사용 예: Number('5') 은 숫자 5 를 반환한다.
- 메소드/함수 이름:
- 용도: 해당 메소드나 함수가 무엇을 하는지 간단히 설명합니다.
- 설명: 메소드나 함수의 기능과 사용 목적을 명확히 합니다.
- 사용 예: 실제로 어떻게 사용되는지 예시를 들어 설명합니다.
- 메소드/함수 이름: toString()
- 용도: 숫자를 문자열로 변환합니다.
- 설명: 숫자를 문자열로 변환하여 자릿수별로 나누거나, 문자열로 다룰 수 있게 합니다.
- 사용 예: 123.toString()은 "123" 문자열을 반환합니다.
3-2) 코드 분석 부분
- 중요 코드 부분:
- arr.reduce((acc, curr) => acc + Number(curr), 0)
- 설명: 배열 arr 의 각 요소를 숫자로 변환하고, reduce() 메소드를 사용하여 배열의 모든 요소의 합을 계산한다. acc 는 누적 값이고, curr 은 현재 배열 요소이다. 초기값 0 부터 시작하여 배열의 모든 요소를 누적 합산한다.
- 장점: reduce() 메소드를 사용하면 배열의 모든 요소를 간결하게 하나의 값으로 누적 계산할 수 있다. → 코드가 직관적이고 가독성이 좋으며, 배열의 합을 빠르게 계산할 수 있다.
4) 코드의 역할 및 활용
4-1) 코드의 역할
- arr.reduce((acc, curr) => acc + Number(curr), 0 는 주어진 숫자의 자릿수 합을 계산하는데 사용된다. 이 합을 기준으로 숫자가 하샤드 수인지 여부를 결정하는데 사용된다. 하샤드 수는 숫자가 자릿수 합으로 나누어 떨어지는지를 판단하는 기준이 된다.
4-2) 적용 예시
- 자릿수 합 계산 방법은 수학적 문제나 데이터 분석에서 유용할 수 있다.
- 예를 들어, 숫자 특성 분석, 데이터 유효성 검사, 특정 규칙을 가진 데이터 필터링 등의 문제에 적용할 수 있다.
- 또한, 숫자 게임에서 점수 계산이나 규칙에 맞는 숫자 판별에 활용될 수 있다.