문제 요구사항
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ left ≤ right ≤ 1,000
풀이
import java.util.stream.IntStream;
class Solution {
public int solution(int left, int right) {
int answer = 0;
//약수의 개수를 구하는 함수 countAll
answer = IntStream.rangeClosed(left,right) //left부터 right까지
// .filter(n -> countAll(n) % 2 == 0) //약수의 개수가 짝수인 것만
.map(n -> countAll(n) % 2 == 0? n : -n)//짝수인 것은 그냥 두고, 홀수인 것만 음수로 변환한다.
.sum(); //더한다
return answer;
}
int countAll(int number){
int count = 0;
for(int i = 1;i<=number;i++){
if(number % i == 0) count++;
}
return count;
}
}
모범답안
class Solution {
public int solution(int left, int right) {
int answer = 0;
for (int i=left;i<=right;i++) {
//제곱수인 경우 약수의 개수가 홀수
if (i % Math.sqrt(i) == 0) {
answer -= i;
}
//제곱수가 아닌 경우 약수의 개수가 짝수
else {
answer += i;
}
}
return answer;
}
}
실패 요인
인사이트
문제는 완벽하게 이해했더라도 예시까지 자세히 보도록 하자.
홀수인 수를 뺀다는 것은 제외한다는 의미일 수도 있지만, 마이너스(-)의 의미도 있을 수 있다.
Solution 클래스 내에서 활용할 함수를 생성하는 법을 배웠다. 접근 제어자는 default로 설정되므로 굳이 적지 않아도 무방하다.
스트림을 사용하기 위해선 java.util.stream.Intstream을 import 해야 한다.
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/77884
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
'Algorithm' 카테고리의 다른 글
| [알고리즘] 부족한 금액 계산하기 (0) | 2026.02.02 |
|---|---|
| [알고리즘] 문자열 내림차순으로 배치하기 (0) | 2026.01.29 |
| [알고리즘] 내적 구하기 (0) | 2026.01.28 |
| [알고리즘] 수박수박수박수박수박수? 문제 풀이 (0) | 2026.01.28 |
| [알고리즘] 콜라츠 추측 (0) | 2026.01.22 |