728x90
문제 및 제한사항
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
**제한사항**
1 ≤ left ≤ right ≤ 1,000
풀이 방법
예를 들어 left = 13, right = 17일 때, 13 ~ 17까지 수들 중 약수의 개수가 짝수일 때 해당 수를 더하고 홀수일 때 해당 수만큼 빼주면 된다.
먼저 left 에서 right까지 갈 수 있도록 while문을 짜서 마지막에 1씩 더해 right보다 커지면 멈추게 한다.
while문 안에서는 left의 약수를 알아본다. for문으로 1부터 시작하는 변수 i로 left를 나눴을 때 나머지가 0이라면 i는 left의 약수이므로 while문 안에 만들어둔 빈 배열에 추가한다. 이 때 빈 배열이 while문 밖에 있으면 제대로 작동하지 않으니 주의.
for문이 끝나고 이 배열이 길이를 2로 나눴을 때 나머지가 없다면 짝수이므로 sum에 left를 더해주고, 나머지가 있다면 홀수이므로 left를 빼주면 된다.
복습하려고 다시 풀어보다가 answer 배열을 바깥에 둬서 오류가 나 한참을 씨름했다; while 문은 왜 해도 해도 실수가 생길까...
당연함 내가 잘 몰라서 그럼
코드
function solution(left, right) {
let sum = 0;
while (left <= right) {
let answer = []
for (let i = 1; i <= left; i++) {
if (left % i === 0) {
answer.push(i)
}
}
if (answer.length % 2 === 0) {
sum += left
} else {
sum -= left
}
left++
} return sum
}
728x90
'⚙️ 코딩테스트' 카테고리의 다른 글
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 행렬의 덧셈 (0) | 2023.04.10 |
---|---|
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 3진법 뒤집기 (0) | 2023.04.10 |
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 문자열 다루기 기본 (0) | 2023.04.10 |
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 직사각형 별찍기 (0) | 2023.04.10 |
[JavaScript] 프로그래머스 코딩테스트 레벨 1 : 부족한 금액 계산하기 (0) | 2023.04.10 |