이노베이션 캠프/3주차_알고리즘
[JS] 약수의 개수와 덧셈
hani:)
2023. 6. 21. 10:50
문제
https://school.programmers.co.kr/learn/courses/30/lessons/77884
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
풀이1. for문 사용
function findDiv(num) { // 약수의 개수 구해주는 함수 (매개변수: 숫자 (int), 리턴 값: 숫자 (int))
let count = 0;
// 약수는 1부터 시작
for (let i=1; i<=num; i++) {
if (num % i === 0) { // i로 나눈 나머지 값이 0이면 약수
count++;
}
}
return count;
}
function solution(start, end) {
// 1. from() 메소드 사용하여 특정 범위로 이루어진 숫자 배열 생성
// Array.from(arrayLike[, mapFn[, thisArg]])
// arrayLike: 배열로 반환하고자 하는 객체
// mapFn: 배열의 모든 요소에 대해 호출할 맵핑 함수
// thisArg: this로 사용할 값
let numbers = Array.from({length: end-start + 1}, (_, i) => i + start);
let result = 0;
// 2. for of문 사용하여 배열의 요소에 접근
for (num of numbers) {
// 3. 약수의 개수를 구하기 (매개변수: 배열의 요소)
let count = findDiv(num);
// 4. 약수의 개수에 따라 연산자 다르게 사용하여 값 저장
if (count % 2 === 0) { // 짝수
result += num;
} else { // 홀수
result -= num;
}
}
return result;
}
풀이2. map 사용
function findDiv(num) {
let count = 0;
for (let i=1; i<=num; i++) {
if (num % i === 0) {
count++;
}
}
return count;
}
function solution(start, end) {
let numbers = Array.from({length: end-start + 1}, (_, i) => i + start);
let result = 0;
numbers.map((num) => {
let count = findDiv(num);
if (count % 2 === 0) { // 짝수
result += num;
} else { // 홀수
result -= num;
}
return true;
});
return result;
}
결론
- 성능 차이는 비슷함.
[for문 성능]
[map 성능]
728x90