function solution(left, right) {
var answer = 0;
let arr = []
// 일단 array를 만듦
for(let i = left; i <=right; ++i){
arr.push(i)
}
// python에는 range가 있지만 js는 없으니 이렇게 만들기!
for (let j = 0; j < arr.length; j++){
let count = 0;
// 약수의 갯수
for (let k = 1; k <= arr[j]; k++){
// 각 요소의 약수를 일단 구해야하므로 이중 for문으로 풀어준다. -> 그래서 1부터 시작한다.
if(arr[j] % k === 0) {
count += 1
// 약수가 되면 카운트를 늘려준다.
}
}
// 이렇게 각각의 약수가 구해진다. 그리고 세로 정렬이 되는데 따로 temp=[]할 필요 없이 바로 구해주면 된다.
if(count % 2 === 0) {
arr[j] = arr[j]
}else{
arr[j] = -1 * arr[j]
// 홀수면 -1 곱해주고 짝수면 그대로 간다.
}
}
answer = arr.reduce((a,b) => a+b, 0)
// 이후 원래 만든 arr의 요소들을 더하면 끝.
return answer;
}
쉽진 않았지만 구글링 열심히 해서 풀었다. 갯수까지 뽑아내는게 관건.
function solution(n) {
var answer = 0;
for (let i = 1; i <= n; i++){
// 약간 공식같다. 1부터 n까지
if(n % i === 0){
// 나눴을 때 나머지가 0이면 약수
answer += i
// 그 약수값을 answer에 더해준다.
}
}
return answer;
}
map, foreach, random까지 별 걸 다 봤으나 아는 선에서 답이 나왔다...
참고한 답
function solution(d, budget) {
d.sort((a, b) => a-b);
// 오름차순이 핵심
while(d.reduce((a, b) => (a+b), 0) > budget){
d.pop()
// 전체 합에서 제일 큰 애 빼는게 포인트
}
return d.length;
}
오름차순하고 빼는게 포인트였다. 왜 생각을 못 했을까.. ㅠ
재귀함수를 이용하긴 했는데 잘 이해가 안 된다. 세모 표시 해야겠다.
const GCD = (a ,b) => b ? GCD(b, a % b) : a;
const LCM = (a, b) => (a * b) / GCD(a, b);
return [GCD(n, m), LCM(n, m)];
비교적 쉽게 풀렸다.
function solution(n) {
var answer = 0;
let temp = []
// 값을 담을 임의의 배열 만듦
for(let i = 1; i <= n; i++){
if(n % i === 1)
temp.push(i)
// 자연수 담은 배열 만들고 나머지 1인거 다 푸쉬함
}
answer = Math.min.apply(null, temp)
// 배열에서 작은 값 구하는 메서드 이용
return answer;
}