반응형
***** 문제 설명 *****
두 정수 left와 right가 매개변수로 주어집니다.
left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고,
약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
***** 제한사항 *****
1 ≤ left ≤ right ≤ 1,000
***** 문제 풀이 *****
이번 문제는 숫자 사이의 약수의 갯수를 파악하는게 중요하다고 생각을 했습니다.
그렇게 약수의 갯수를 구하는 공식을 한참 인터넷을 뒤져 공부를 하다가 문득
홀수와 짝수인지만 구별을 하면되지 않을까?
라는 생각을 하게 되었고 생각해보니 약수가 홀수가 되는 방법은 자기자신을 곱하여 본 값과 같으면 홀수가 된다는 생각이 들었습니다.
마치 4, 9, 16, 25 같은 숫자들이 그러합니다.
이것을 기준으로 코드를 작성하였습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public static int solution(int left, int right) {
answer = 0;
for(int i = left; i <= right; i++){
Double test = Math.sqrt(i);
if( test % 1 != 0.0 ){
answer += i;
}else{
answer -= i;
}
}
System.out.println(answer);
return answer;
}
|
cs |
이러한 방식으로 작성하였습니다. test의 경우 Math.sqrt함수의 경우 제곱근을 구하는 메서드 이고
if문 안에 % 1 를 진행한다음 0.0과 비교한것은 제곱근이 정수인가 아닌가를 판별하기 위함 입니다.
0.0이 아니면 정수가 아님으로 약수의 갯수가 짝수가 나와 +를
맞다면 약수의 갯수가 홀수가 되어 -를 해주어 정답을 도출하였습니다.
반응형
'Algorithm & Data Structure > Algorithm' 카테고리의 다른 글
[프로그래머스] 문자열 다루기 기본 풀이 (0) | 2023.11.16 |
---|---|
[프로그래머스] 문자열 내림차순으로 배치하기 풀이 (0) | 2023.11.15 |
[프로그래머스] 내적 문제 풀이 (0) | 2023.11.14 |
[프로그래머스] 수박수박수박수박수박수? 풀이 (0) | 2023.11.13 |
[프로그래머스]제일 작은 수 제거하기 (1) | 2023.11.12 |