본문 바로가기
PS/BOJ

백준 17756 자바 - Kieszonkowe (BOJ 17756 JAVA)

by Nahwasa 2022. 3. 24.

문제 : boj17756

 

  우선 NIESTETY 를 출력해야 하는 경우부터 살펴보자. 결국 n개에 대해 가장 큰 짝수를 구해야 하는데, 짝수로 만들 수 없다는 얘기는 n이 1개였고, 그 한개가 홀수인 경우 밖에 없다.

 

  이제 전체 로직을 살펴보자. 짝수를 만들 수 있는 경우를 살펴보면 된다. 우선 짝수+짝수는 당연히 짝수이다. 홀수+홀수도 역시 짝수이다. 따라서 짝수는 그냥 넘어가면 되고, 홀수는 홀수인 것이 짝수개 있다면 짝수로 만드는데 문제가 없다. 이제 문제는 홀수가 홀수개 있는 경우인데, 이 때는 한 개의 수를 제외해야 한다. 당연히 가장 작은 홀수를 제거하는 것이 이득일 것이다.

 

  최종적으로 전체 로직을 살펴보면 다음과 같다.

 

 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int evenSum = 0;
        int oddSum = 0;
        int minOdd = Integer.MAX_VALUE;
        int oddCnt = 0;
        StringTokenizer st = new StringTokenizer(br.readLine());
        while (n-->0) {
            int cur = Integer.parseInt(st.nextToken());
            if ((cur&1)==0) {
                evenSum+=cur;
                continue;
            }
            oddCnt++;
            oddSum+=cur;
            if (cur<minOdd) minOdd=cur;
        }
        if ((oddCnt&1)==1) oddSum-=minOdd;
        if (oddCnt == 1 && evenSum == 0) {
            System.out.println("NIESTETY");
            return;
        }
        System.out.println(evenSum+oddSum);
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글