https://school.programmers.co.kr/learn/courses/30/lessons/77884
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제
두 정수 left
와 right
가 매개변수로 주어집니다. left
부터 right
까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤
left
≤right
≤ 1,000
입출력 예
left | right | result |
---|---|---|
13 | 17 | 43 |
24 | 27 | 52 |
입출력 예 #1
- 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
수 | 약수 | 약수의 개수 |
---|---|---|
13 | 1, 13 | 2 |
14 | 1, 2, 7, 14 | 4 |
15 | 1, 3, 5, 15 | 4 |
16 | 1, 2, 4, 8, 16 | 5 |
17 | 1, 17 | 2 |
- 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.
입출력 예 #2
- 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
수 | 약수 | 약수의 개수 |
---|---|---|
24 | 1, 2, 3, 4, 6, 8, 12, 24 | 8 |
25 | 1, 5, 25 | 3 |
26 | 1, 2, 13, 26 | 4 |
27 | 1, 3, 9, 27 | 4 |
- 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.
풀이
첫 번째 풀이
import java.util.stream.IntStream;
class Solution {
public int solution(int left, int right) {
return IntStream.rangeClosed(left, right)
.map(i -> (int)IntStream.rangeClosed(1, i).filter(j -> i%j == 0)
.count() % 2 == 0 ? +i : -i)
.sum();
}
}
( 이중 for 문 구조 )
약수의 개수를 모두 구한 뒤,
개수가 짝수면 양수로, 홀수면 음수로 변환한 뒤 더한다.
두 번째 풀이
import java.util.stream.IntStream;
class Solution {
public int solution(int left, int right) {
return IntStream.rangeClosed(left, right)
.map(i -> i % Math.sqrt(i) == 0 ? -i : +i)
.sum();
}
}
제곱근으로 나눈 나머지가 0이면, 약수의 개수는 홀수이다. 를 이용하면
이중 순회로 약수의 개수를 구할 필요 없이
간단하게 값을 계산할 수 있다.
coding_test/프로그래머스/1/77884. 약수의 개수와 덧셈 at main · gajicoding/coding_test
This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - gajicoding/coding_test
github.com
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr
'코딩 테스트 (Java) > 프로그래머스' 카테고리의 다른 글
[level 1] 12940. 최대공약수와 최소공배수 (0) | 2025.05.02 |
---|---|
[level 1] 12932. 자연수 뒤집어 배열로 만들기 (1) | 2025.04.28 |
[level 1] 340213. [PCCP 기출문제] 1번 / 동영상 재생기 (1) | 2025.04.25 |
[level 1] 389478. 택배 상자 꺼내기 (1) | 2025.04.24 |
[level 1] 258712. 가장 많이 받은 선물 (1) | 2025.04.24 |