프로그래머스 LV1 "하샤드 수"
프로그래머스 Lv1 하샤드 수
기초부터 다시 공부를 하기위해 프로그래머스 라는 사이트에서 코딩테스트를 LV0 부터 가능한곳까지 못하는곳은 레퍼런스를 찾아가며 풀어보려고 합니다.
매일 1개의 풀이를 하고 그 풀이에대한 나의 생각 및 해석을 적어보려합니다.
오늘은 LV1 열여덟번째 문제 ‘하샤드 수’ 문제입니다.
위 이미지가 프로그래머스 코딩문제입니다.
문제는 매개변수로 자연수 x
를 입력받아 x
가 하샤드 수인지 아닌지 확인후 맞으면 true
를, 하샤드 수가 아니면 false
를 출력하는 문제입니다.
오늘 문제에서는 간단한 반복문과 조건문으로 문제를 해결해 보겠습니다.
그럼 오늘의 문제를 한번 풀어보겠습니다.
기본 세팅 코드도 알아보겠습니다.
1
2
3
4
function solution(x) {
var answer = true;
return answer;
}
기본 세팅 코드는 매개변수 x
는 정수가 입력되고 함수 안에는 answer
이라는 변수가 선언되어 true
를 리턴하는 간단한 기본 세팅 코드입니다.
우선 문제를 알가보기 전에 ‘하샤드 수’가 무엇인지 한번 간단하게 알아보고 문제를 해결해 보겠습니다. 저도 이번 포스팅을 하면서 처음 알게되었습니다.
하샤드 수(하샤드 수학, Harshad number)
하샤드 수(하샤드 수학, Harshad number)는 특정한 수학적 속성을 갖는 정수를 가리키는 용어입니다. 이 개념은 수학자 D.R. Kaprekar가 개발했으며, 스위스의 수학자인 하샤드(Harshad)의 이름을 따서 명명되었습니다. 하샤드 수의 특징은 해당 수를 이루는 각 자릿수의 합으로 그 수를 나누었을 때 나머지가 0이 되는 것입니다.
예를 들어, 18은 하샤드 수입니다. 왜냐하면 1 + 8 = 9이며, 18을 9로 나누면 나머지가 0이기 때문입니다. 하지만 19는 하샤드 수가 아닙니다. 1 + 9 = 10이지만, 19를 10으로 나누면 나머지가 9이기 때문입니다.
하샤드 수는 수학적으로 의미가 깊습니다. 우선, 어떤 수의 각 자릿수의 합을 계산하는 것은 비교적 쉬운 작업입니다. 이를 통해 주어진 수가 하샤드 수인지 아닌지를 빠르게 판단할 수 있습니다. 또한 하샤드 수는 정수론의 중요한 개념 중 하나로 다양한 수학적 연구와 문제에 응용됩니다.
하샤드 수에는 흥미로운 성질이 많이 있습니다. 예를 들어, 하샤드 수는 항상 그 자릿수의 합으로 나누어 떨어지기 때문에 다양한 수의 성질을 분석할 때 유용하게 사용됩니다. 또한 하샤드 수의 성질을 이용하여 다양한 수학적 문제를 해결할 수 있습니다.
또한 하샤드 수의 일반화된 개념이 존재합니다. 예를 들어, 하샤드 수의 자릿수의 합 대신 다른 연산을 사용하여 나누어 떨어지는 수를 찾는 경우도 있습니다. 이러한 확장된 개념은 수학적으로 더욱 풍부한 응용과 연구를 가능하게 합니다.
요약하자면, 하샤드 수는 수학적으로 흥미로운 성질을 가지고 있는 정수로, 각 자릿수의 합으로 나누어 떨어지는 수를 의미합니다. 이 개념은 수학의 다양한 분야에서 응용되며, 다양한 수학적 문제의 해결에 활용됩니다.
이렇게 하샤드 수가 무엇인지 알아보았습니다. 흥미롭군요… 저는 처음들어본 수 입니다ㅎㅎ 여러분은 어떠신지 댓글로 말씀해주세요.
그럼 이제 문제를 다시 해결해보겠습니다. 우선 해당 수가 하샤드 수인가 아닌가를 판단하기 위해 x
의 의 각 자릿수를 더해야 합니다.
1
2
3
4
5
6
7
8
9
function solution(x) {
var answer = true;
var num = String(x).split("");
var result = 0;
num.forEach(e => {
result += Number(e);
})
return result;
}
위 코드는 문제에서 요구한 매개변수 x
의 각 자릿수를 더한 값을 리턴하는 코드입니다.
var num = String(x).split(“”);:
x
를 문자열로 변환한 후,split("")
함수를 사용하여 문자열을 각각의 문자로 나누어 배열로 만듭니다. 이렇게 하면 숫자를 자릿수 별로 나눌 수 있습니다.var result = 0;:
result
변수를 선언하고 0으로 초기화합니다. 이 변수는 자릿수의 합을 저장할 것입니다.num.forEach(e => { … }):
num
배열의 각 요소에 대해 반복하면서 숫자의 각 자릿수를 처리합니다.forEach
함수는 배열의 각 요소에 대해 제공된 함수를 실행합니다. 여기서는 화살표 함수를 사용하여 각 자릿수를 e로 받아들이고 처리합니다.result += Number(e);: 각 자릿수
e
를 숫자로 변환한 후result
에 더합니다.
이렇게 매개변수 x
의 각 자릿수를 더한 값을 구했습니다.
그럼 이제 남은 것은 x
를 각 자릿수를 더한 값으로 나눴을때 나머지 값이 0인지 판별해야합니다.
바로 코드로 판별을 해보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function solution(x) {
var answer = true;
var num = String(x).split("");
var result = 0;
num.forEach(e => {
result += Number(e);
})
if(x%result == 0) {
answer = true;
}else {
answer = false;
}
return answer;
}
이렇게 코드가 완성되었습니다. 문제를 풀고보니 이전에 풀었던 문제와 비슷한거같네요?
그럼 프로그래머스에 제출하기 위해 다시 코드를 확인해보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function solution(x) {
var answer = true;
var num = String(x).split("");
var result = 0;
num.forEach(e => {
result += Number(e);
})
if(x%result == 0) {
answer = true;
}else {
answer = false;
}
return answer;
}
문제의 식이 완성되었으니 프로그래머스에 한번 확인해보겠습니다.
성공이네요!
오늘은 프로그래머스 LV1 ‘하샤드 수’ 문제의 대해서 알아봤습니다.
제 방법이 꼭 정답은 아니니 그저 이런방법도 있구나하고 참고용으로만 봐주시면 감사하겠습니다.
감사합니다.