[프로그래머스] Java 코딩테스트 Lv.1 - 약수의 개수와 덧셈

yihyun·2025년 4월 22일

코딩테스트

목록 보기
65/105

약수의 개수와 덧셈

✅ 문제 설명

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

✅ 제한사항

1 ≤ left ≤ right ≤ 1,000

🔽 소스코드

💻 풀이
📌 약수의 특징
1. 약수는 1과 자기 자신을 포함한다.
2. 짝을 이루는 구조이다.
3. 제곱근을 이용하면 시간복잡도를 줄일 수 있다.

  • 약수의 특징 중 제곱근을 활용한 풀이를 진행했다.

  • 먼저 i=left 로 시작 조건과 i <= right로 종료 조건을 설정해준 후

  • Math.sqrt() 를 이용해 제곱근을 구하고 1과 나눈 나머지가 0일 경우를 체크해 준다

  • 만약 약수의 개수가 짝수일 경우 제곱근은 3.2323... 으로 나올 것이고, 홀수일 경우 3 으로 나오기 때문에 1로 나눈 나머지가 0일 경우에는 약수가 짝수, 아닐경우 홀수인 것을 알 수 있다.

  • 이후 제한조건에서 알 수 있듯이 left와 right는 동일한 숫자일 수 있기 때문에 만약 같은 숫자일 경우 체크하는 코드를 작성하고 마무리 했다.

시간 0.72ms ~ 12.72ms

	public int solution1(int left, int right) {

		
		int result = 0;
		
		for(int i = left; i <= right; i++) {
			if(Math.sqrt(i) % 1 == 0) { // 홀수인 경우 (제곱근이 정수로 딱 떨어짐)
				result -= i;
				System.out.println();
			}else { // 짝수인 경우
				System.out.println();
				result += i;
			}
			
			
		}
		
		if(left == right) {
			result = left;
			result += right;
		}
		
		return result;
	}
profile
개발자가 되어보자

0개의 댓글