STUDY/코딩테스트
[프로그래머스] JS 약수의 개수와 덧셈
쑥말고인절미
2022. 9. 14. 21:12
문제
내 답안
function solution(left, right) {
var answer = 0;
for(let i = left; i <= right; i++) {
let j = 1;
let count = 0;
while(i >= j) {
if(i % j == 0) {
count += 1;
}
j++;
}
count % 2 == 0 ? answer += i : answer -= i
// if(count%2 == 0) { answer += i; }
// else if(count%2 != 0) { answer -= i; }
}
return answer;
}
메모
흠 어떻게 해야할까 싶어 고민을 좀 하고 풀었다. 아래 주석처리 되어 있는 if-else문은 삼항연산자를 이용해 한줄로 간소화해서 주석처리했다. 삼항연산자 오랜만에 써서 어떻게 쓰는건지 찾아 봤다.
아래는 친구 소스이다. 친구가 찐 하드코딩이라며 보내줬는데 오... 진짜다ㅋㅋㅋ 나나 친구나... 힣 다른사람풀이를 보니 4줄로 작성한 분도 계시던데... 그분들 소스 보면서 공부해야겠다.
function solution(left, right) {
var answer = [];
var x = [];
var y = [];
for(var i = left; i <= right ; i++){
answer.push(i);
}
x = answer.map((x) => {
var j =1;
var count =0;
while(j <= x){
if(x%j == 0){
count += 1;
j++;
}else{
j++;
}
}
return count;
})
y = x.map((x, i) => {
if(x%2 == 0){
return answer[i]
} else{
return answer[i] * -1;
}
}).reduce((a,b) => a+b);
return y;
}
아래가 짧고 간단하게 작성한 코드인데 루트는 생각은 했다만 어떻게 이용해야할지 감을 못잡았다. 양수에 루트를 씌웠을때 소수자리 없이 int형이면 짝수인 것을...! 생각을 연장시켜보자. 삼항연산자를 썼으면 5줄로 구성된 if-else을 한 줄로 줄일 수 있을 것이다. (그럼 가독성이 별로려나)
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;
}
참고링크
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Conditional_Operator
조건 (삼항) 연산자 - JavaScript | MDN
조건 (삼항) 연산자는 JavaScript에서 세 개의 피연산자를 받는 유일한 연산자입니다. 앞에서부터 조건문, 물음표(?), 조건문이 참(truthy)일 경우 실행할 표현식, 콜론(:), 조건문이 거짓(falsy)일 경우
developer.mozilla.org