반응형
약수의 개수와 덧셈
//내가 작성한 코드
function solution(left, right) {
let result = '';
let count = 0;
for(let i = left; i <= right; i++){
count = 0;
for(let j = 1; j <= i; j++){
if(i % j === 0){
count++;
}
}
if(count % 2 === 0){
result = result + `+${i}`
}else{
result = result + `-${i}`
}
}return eval(result);
}
Pseudo Code
left부터 right까지 반복문으로 순회하는데
left를 1부터 자기자신까지 나누어서 나머지가 0인 숫자의 수를 count++한다.
짝수면 `+${left}`
홀수면 `-${left}`
result = ''; 여기에 더해주자
이것을 eval해 볼까?
위 작성한 수도코드를 바탕으로 코드를 작성하였고 결과는 통과였다!
이거 말고 다른 방법이 있을까라는 생각이 들었지만 항상 예상을 뒤엎는 결과가 있기에 다른 사람의 풀이로 들어갔다.
......충격적인 풀이가 있었는데.....
function solution(left, right) {
var answer = 0;
for (let i = left; i <= right; i++) {
if (Number.isInteger(Math.sqrt(i))) { //?????이게 뭐지??????
answer -= i;
} else {
answer += i;
}
}
return answer;
}
해당 풀이의 핵심은 "어떠한 수의 제곱근이 정수이면 약수의 개수가 홀수 라는 것"
이게 되나? 라는 생각에 입출력 예시를 찾아보았다.
수 약수의 개수
13 2
14 4
15 4
16 5
17 2
수 약수의 개수
24 8
25 3
26 4
27 4
//정말 16과 25만 약수의 개수가 홀수이다.
배운 점
어떠한 수의 제곱근이 정수이면 약수의 개수가 홀수이다.
정수의 확인은 Number.isInteger() 메서드를 통해 할 수 있다.
문자열로 result("")를 구하여 eval()하였지만 보통은 result(0)에 -= 혹은 +=를 통해 답을 뽑아낸다.
반응형
'개인공부' 카테고리의 다른 글
[노마드코더]cloudflare workers로 노션을 Database로 써보자! (0) | 2022.09.26 |
---|---|
2021년 6월 5일 cmarket 리덕스 스프린트를 위한 redux 흡수하기(뇌피셜 + 튜토리얼/ 공식문서 훑어보기) (0) | 2021.06.05 |
2021년 5월 19일 프로그래머스(가운데 글자 가져오기, K번째수) (0) | 2021.05.19 |
2021년 5월 9일 클래스를 이용한 모듈화, 프로토 타입 예습 (0) | 2021.05.09 |
2021년 4월 25일 TIL(호이스팅(Hoisting), spread/rest) (0) | 2021.04.25 |