KDLiam

[Programmers 코딩 기초 트레이닝 : Java] 홀짝에 따라 다른 값 반환하기 본문

Problems(Java)/Programmers

[Programmers 코딩 기초 트레이닝 : Java] 홀짝에 따라 다른 값 반환하기

KDLiam 2025. 10. 2. 10:08

➕ 홀수 합 vs 짝수 제곱합 (프로그래머스 181935번)

📌 문제 링크: 프로그래머스 181935 - 홀수 vs 짝수


📖 문제 설명

주어진 정수 n에 대하여,

  • n이 홀수면 → 1 + 3 + 5 + ... + n
  • n이 짝수면 → 2² + 4² + 6² + ... + n²
    을 구하는 문제입니다.

✨ 첫 번째 풀이 (반복문)

 
class Solution {
    public int solution(int n) {
        int answer = 0;
        
        boolean isEven = n % 2 == 0;
        
        if (!isEven) { // odd
            for (int i = 1; i <= n; i += 2) {
                answer += i;
            }
        } else { // even
            for (int i = 2; i <= n; i += 2) {
                answer += (i * i);
            }
        }
        
        return answer;
    }
}

💡 특징

  • 홀수일 때는 홀수들만 더하고, 짝수일 때는 짝수의 제곱들을 더함
  • 직관적이고 이해하기 쉽지만, 반복문을 n/2번 수행해야 함
  • 시간복잡도: O(n/2) ≈ O(n)

✨ 두 번째 풀이 (수학적 공식 활용)

 
class Solution {
    public int solution(int n) {
        if(n%2==1) { // odd
            int k = (n+1) / 2;
            return k*k;
        } else { // even
            int k = n / 2;
            return 4 * k * (k+1) * (2*k+1) / 6;
        }
    }
}

💡 수학적 공식 정리

  • 홀수 합 공식
    1 + 3 + 5 + ... + (2k - 1) = k²
    👉 여기서 k = (n+1)/2
  • 짝수 제곱합 공식
    2² + 4² + ... + (2k)² = 4 × k(k+1)(2k+1) / 6
    👉 여기서 k = n/2

📊 효율성 비교

항목반복문 풀이수학 공식 풀이
직관성 높음 중간 (수학적 사고 필요)
시간복잡도 O(n) O(1)
공간복잡도 O(1) O(1)
성능 n이 클수록 느려짐 n이 커져도 동일한 속도

🔑 결론: 수학 공식을 활용하면 입력 크기에 상관없이 항상 즉시 결과를 얻을 수 있음