728x90
문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ left ≤ right ≤ 1,000
입출력 예
입출력 예 #1
- 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
내 풀이
import java.util.*;
class Solution {
public int solution(int left, int right) {
// 1. 수1~ 수2 사이동안 반복문
// 2. 하나하나 돌 동안에 약수의 개수 구하는 함수만들기 boolean sol(int i) 짝수면 true
// if(sol) == true면 더하고 홀수면 빼기
int answer = 0;
for (int i = left; i <= right ; i++) {
if (sol(i)) {
answer += i;
}else {
answer -= i;
}
}
return answer;
}
public boolean sol(int num) {
int cnt = 1;
for (int i = 2; i <=num ; i++) {
if (num % i == 0) {
cnt++;
}
}
if (cnt % 2 == 0) {
return true;
}
return false;
}
}
public class codingTest {
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.solution(13,17));
}
}
sol이라는 함수를 별도로 만들어주었다.
수의 약수가 짝수면 true, 홀수면 false 를 반환하는 함수이다.
solution에서 가져다 쓰기 편했다.
뭔가 복잡해지는 것 같을 때는 따로 함수를 만드는게 제일 쉬운 것 같다 !!
다른 사람 풀이
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;
}
}
좋아요를 제일 많이 받은 풀이이다.
제곱근으로 그 수를 나누게 되면 홀수가 나온다. 수학적인 지식? 음 직관력이라고 해야하나. 생각지도 못한 풀이였다.
나는 언제 저런 경지에 오를 수 있을지 모르겠다.
'Back-end > Algorithm' 카테고리의 다른 글
[프로그래머스] 신고 결과 받기 (0) | 2023.07.15 |
---|---|
[강의][섹션6.Sorting and Searching] 4. LRU(캐시, 카카오 변형) (0) | 2023.07.14 |
[프로그래머스] Lv1. 문자열 내림차순으로 배치하기(java) (0) | 2023.07.11 |
[프로그래머스] Lv1. 제일 작은 수 제거하기(java) (0) | 2023.07.09 |
[프로그래머스] Lv1. 올바른 괄호(java) - 스택 (0) | 2023.07.08 |