CODING TEST/programmers

Day4 - 홀짝에 따라 다른 값 반환하기

iamyuunzo 2025. 7. 11. 10:04

📌 문제 정보

- 문제 이름 : 코딩 기초 테스트 - 홀짝에 따라 다른 값 반환하기

- 문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/181935

 

 

📌 문제 요약

핵심 조건: 양의 정수 n이 매개변수로 주어질 때, n이 홀수라면 n 이하의 홀수인 모든 양의 정수의 합을 return 하고 n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return

- 제한: 1 ≤ n ≤ 100

 

 

📌 내 풀이 및 코드

class Solution {
    public int solution(int n) {
        int sum = 0;

        if (n % 2 == 1) {
            for (int i=1; i<=n; i++) {
                if (i % 2 == 1) {
                    sum += i;
                }
            }
        } else {
            for (int i=1; i<=n; i++) {
                if (i % 2 == 0) {
                    sum += i * i;
                }
            }
        }
        return sum;
    }
}

- if, for문을 쓰는 것까지는 맞았는데 자꾸 다른 값이 나와서 힌트를 물어봄.

- 나는 for문 안에 그냥 냅다 sum 식을 넣었는데, 문제 조건인 홀수면 홀수만 더하고 짝수면 짝수 제곱만 더하는 것까지 고려하지 못해서 sum 식이 돌아갈 때 짝수, 홀수 구분 없이 식이 계산되고 있어서 틀린거였음.

 

 

📌 다른 사람들 풀이

// 1
int answer = 0;

for(int i = n; i >= 0; i -= 2)
    answer += (n % 2 == 0) ? i * i : i;

return answer;


// 2
if (n % 2 == 1) {
   return (n + 1) * (n + 1) / 2 / 2;
   } else {
     return 4 * n/2 * (n/2 + 1) * (2 * n/2 + 1) / 6;   
   }
}

<-- 다른 풀이 요약 -->

- 1 : 삼항연산자를 사용한 반복문.

- 2 : 수학 공식을 이용한 풀이. 

  • 홀수일 때
    • 1부터 n까지 홀수의 합 = (1 + 3 + 5 + ... + n)
    • n이 홀수이면, 1부터 n까지 홀수의 갯수는 (n + 1)/2
    • 이 수열의 합은 (첫 항 + 마지막 항) * 항의 개수 / 2 → 식 정리하면 (n + 1)^2 / 4
  • 짝수일 때
    • 1부터 n까지 짝수 제곱의 합 = 4 * (1^2 + 2^2 + ... + k^2)
    • k = n/2 → 1부터 k까지 제곱합 공식 사용: k(k + 1)(2k + 1)/6
버전  속도  가독성  실수 위험
처음 버전 (내 코드) 느림 (O(n)) 아주 직관적 실수 적음
for문 최적화 (1) 중간 (O(n/2)) 직관적 실수 적음
수학 공식 (2) 가장 빠름 (O(1)) 직관성 ↓ 수학식 실수 가능

 

 

 

📌 새로 배운 문법

<-- 이번 문제에서 새로 배운 Java 문법 정리 -->

- 문법은 따로 없고, Day4 문제를 풀 때 느낀건 삼항연산자를 써서 간단하게 쓰는 사람들이 많았다는 것.. 나도 삼항연산자로 풀 수 있는 문제면 그걸 활용하도록 노력해봐야겠다!