Notice
Recent Posts
Recent Comments
Link
«   2026/02   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
Tags more
Archives
Today
Total
관리 메뉴

luke

[프로그래머스] - 홀짝에 따라 다른 값 반환하기 (Java/자바) 본문

알고리즘문제/프로그래머스(Java)

[프로그래머스] - 홀짝에 따라 다른 값 반환하기 (Java/자바)

luke-king 2025. 10. 7. 13:21

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

 

 

 

 

 

 

 

 

문제.


 

 

 

 

 

 

 

 

풀이.


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

오늘 문제는 프로그래머스 "홀짝에 따라 다른 값 반환하기" 문제다.

문제 설명은 n값이 홀수 이면 1~n 홀수 값들의 합을 구하고 n이 짝수이면 1~n 짝수 값들의 제곱근의 합을 구하는 문제다.

바로 풀이해보겠다.

 

1. n입력값만큼 반복해주기 위해 for문을 먼저 사용한다.

 

2. for문 안에서의 if문인 조건식을 만들어 준다. 첫 번째로 홀수 값들을 출력하는 조건식이고 answer += i로 합을 구해준다.

 

3. 두 번째로 짝수는 else에서 answer += i * i로 짝수 값의 제곱근을 더해준다. 그럼 끝이다.

 

하지만 여기서 내가 푼 풀이 방식과 최적화된 풀이 방식을 비교해보려 한다. 위에 코드도 작동은 하지만 개발자의 입장에서는 최적화된 코드와 효율을 따져가며 프로그래밍해야 한다 생각하기 때문이다. 밑에 코드가 위에 코드보다 나은 코드다.

 

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

처음에 보여준 코드와 다르게 반복문을 먼저 사용하지 않고 조건으로 루프 내에서 불필요한 연산을 하지 않는다.

또한 for문에서 처음에 n값이 홀수 인지 짝수인지 먼저 확인 후 for문을 돌리기에 for문에서 i++을 사용 하지 않고 i+=2를 사용해줬다. 그럼 하나하나 i의 값을 찾지 않아도 되기 때문이다.