문제설명
양의 정수 x가 하샤드 수라면 x의 자릿수의 합으로 x가 나눠져 떨어져야 합니다. 예를 들어 18의 자릿수의 합은 9이고, 18은 9로 나눠 떨어지므로 하샤드의 수입니다. 자연수 x를 입력 받아 x가 하샤드 수인지 아닌지 검사하는 함수
제한사항
- x는 1 이상, 10000 이하인 정수입니다.
내가 푼 문제 풀이
첫번째 방법(toString(), split(), for, parseInt(), 삼항연산자)
function solution(x) {
let answer = true;
let arr = (x+'').split("")
// == x.toSting().split("")
let sum = 0
for(let i = 0; i<arr.length; i++){
sum += parseInt(arr[i])
}
answer = (x % sum == 0? true : false)
return answer;
}
처음에는 for문과 if문을 사용해서 간단하게 짜보았다.
1) 정수 x의 자릿수를 더하기 위해서 (x+'')를 사용해서 x를 숫자 타입에서 문자 타입으로 변환 해주었다.
2) 문자열로 바뀐 x를 split()을 사용해서 한글자씩 나눠 arr라는 배열에 담았다.
3) 자릿수를 더한 합을 저장하기 위해 sum이라는 변수를 지정 해주고 0으로 초기화 해주었다.
4) for문을 돌리면서 arr[i]의 값을 parseInt()를 사용하여 정수로 바꾼 후 sum에 더해주었다,
5) 삼항연산자를 사용하여 x를 sum으로 나눴을 때 나누어 떨어지면(나머지가 0이면) true를 아니라면 false를 answer에 담아서 answer를 return 했다.
두번째 방법(toString(), split(), forEach(), parseInt(), 삼항 연산자)
function solution(x) {
let arr = (x+'').split("")
// == x.toSting().split("")
let sum = 0
arr.forEach((item)=>{sum += parseInt(item)})
return (x % sum == 0? true : false);
}
1) 정수 x의 자릿수를 더하기 위해서 (x+'')를 사용해서 x를 숫자 타입에서 문자 타입으로 변환 해주었다.
2) 문자열로 바뀐 x를 split()을 사용해서 한글자씩 나눠 arr라는 배열에 담았다.
3) 자릿수를 더한 합을 저장하기 위해 sum이라는 변수를 지정 해주고 0으로 초기화 해주었다.
4) 배열함수 forEach()를 사용하여 item이라는 이름의 요소를 불러오고 parseInt()를 사용하여 정수로 바꿔준다.
5) 정수로 바꾼 값을 sum에 더해준다.
6) 삼항연산자를 사용하여 x를 sum으로 나눴을 때 나누어 떨어지면(나머지가 0이면) true를 아니라면 false를 answer에 담아서 answer를 return 했다.
세번째 방법(toString(), split(), reduce(), 삼항연산자)
function solution(x) {
let arr = (x+'').split("")
// == x.toSting().split("")
let sum = arr.reduce((sum, item)=>sum + parseInt(item), 0)
return (x % sum == 0? true : false);
}
바뀐 부분만 설명 하자면 reduce() 함수를 사용하여 sum에 parseInt(item)을 더하도록 구현했다. 초깃값은 0으로 지정했다. sum = 을 사용한 이유는 reduce 안에 있는 sum은 함수 reduce 함수 내에서만 유효하기 때문이다.
https://programmers.co.kr/learn/courses/30/lessons/12947
'항해 중 > 2주차 알고리즘(프로그래머스)' 카테고리의 다른 글
4일차 → 3진법 뒤집기(toString(), split(), reverse(), join(), parseInt()) (0) | 2021.11.11 |
---|---|
4일차 → 콜라츠 추측(while 반복문) (0) | 2021.11.11 |
3일차 → 제일 작은 수 제거하기(indexOf(), splice(), filter()) (0) | 2021.11.10 |
3일차 -> 정수 제곱근 판별(Math.sqrt(), Math.pow(), Number.isInteger()) (0) | 2021.11.10 |
3일차 → 서울에서 김서방 찾기(템플릿 연산자, indexOf()) (0) | 2021.11.10 |
댓글