Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- react
- C++
- SW
- maeil-mail
- 이코테
- redux-toolkit
- Python
- java
- 리액트
- 매일메일
- 항해플러스
- redux
- Algorithm
- useDispatch
- sw expert academy
- 자바
- Get
- react-redux
- redux-saga
- 코딩테스트합격자되기
- 테코테코
- json-server
- axios
- programmers
- createSlice
- 알고리즘
- react-router
- 프로그래머스
- JavaScript
- 항해99
Archives
- Today
- Total
Binary Journey
[프로그래머스] 하샤드 수 본문
반응형
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
** Javascript
1) 나의 첫번째 풀이는 이렇다.
function solution(x) {
const arrX = `${x}`.split("").map((n) => parseInt(n));
let sum = 0;
for (const num of arrX) {
sum += num;
}
return !(x % sum);
}
2) reduce 를 좋아하는 지금의 나
function solution(x) {
return !( x % `${x}`.split("").reduce((acc, curr) => {
acc += parseInt(curr);
return acc;
}, 0));
}
욕심을 버리고 가독성 있게 정리하면
function solution(x) {
const sum = `${x}`.split("").reduce((acc, curr) => {
acc += parseInt(curr);
return acc;
}, 0);
return !( x % sum);
}
이렇게 된다.
다른 사람들의 풀이를 보면
// 문제가 개편되었습니다. 이로 인해 함수 구성이나 테스트케이스가 변경되어, 과거의 코드는 동작하지 않을 수 있습니다.
// 새로운 함수 구성을 적용하려면 [코드 초기화] 버튼을 누르세요. 단, [코드 초기화] 버튼을 누르면 작성 중인 코드는 사라집니다.
function Harshad(n){
return !(n % (n + "").split("").reduce((a, b) => +b + +a ));
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(Harshad(148))
reduce 안 람다 함수를 더 알아봐야겠다.
하지만 숫자를 string array 를 바꿔서 푸는 것은 아무래도 효율이 떨어진다고 한다.
아래는 속도를 우선시 한 사람의 풀이다.
function solution(x) {
let num = x;
let sum = 0;
do {
sum += x % 10;
x = Math.floor(x / 10);
} while (x > 0);
return !(num % sum);
}
그리고 재귀함수의 달인의 풀이다.
function solution(x, i = 0, sum = 0) {
return String(x).length === i ? x % sum === 0 : solution(x, i + 1, sum + String(x)[i] * 1);
}
속도는 느리지만 처음 보는 함수가 있어 가져온 풀이다.
function solution(x) {
return x % eval([ ...x.toString() ].join("+")) ? false : true;
}
** Java
javascript 로는 string 으로 바꿔서 풀었는데 형변환의 경우 시간이 오래 걸린다고 해서 java는 정수로만 해결했다.
class Solution {
public boolean solution(int x) {
int divisor = 0;
int newX = x;
while (newX > 0) {
divisor += newX % 10;
newX /= 10;
}
return x % divisor == 0;
}
}
javascript 의 경우 숫자 형태를 정해주지 못해서 parseInt 를 해야 하는데 java의 경우 int 형으로 바로 선언하니까 편했다.
계속 나눠도 몫만 newX에 담긴다.
숫자로 계산하여 푼 경우 거의 동일하게 푼 것 같다.
** Python 의 경우 divmod() 함수를 한 번 이용해 보자
divmod 는 몫과 나머지를 (몫, 나머지)의 튜플 형태로 return 해주는 python 내장함수이다.
x = divmod(a, b)
x 값으로 (a // b, a % b) 가 리턴된다.
반응형
'프로그래머스 > level 1' 카테고리의 다른 글
[프로그래머스] 시저 암호 (0) | 2021.07.27 |
---|---|
[프로그래머스] 평균 구하기 (0) | 2021.07.23 |
[프로그래머스] 핸드폰 번호 가리기 (0) | 2021.07.23 |
[프로그래머스] 행렬의 덧셈 (0) | 2021.07.23 |
[프로그래머스] 정수 제곱근 판별 (0) | 2021.07.22 |