happy coding

[java] 28062. 준석이의 사탕 사기 본문

coding study/baekjoon

[java] 28062. 준석이의 사탕 사기

yeoonii 2023. 7. 28. 01:00

돈 많은 준석이가 동생을 위해 사탕을 사는구나.. 누나도 반포 자이 한 채를 가득채우는 사탕을 가지고 싶단다.

 

import java.io.*;
import java.lang.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        //사탕 묶음의 개수인 n을 입력 받음
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n];

        //각각의 사탕 묶음에 담겨 있는 사탕의 개수를 입력받음
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i=0 ; i<arr.length ; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        //test.사탕 개수 확인
        System.out.println(Arrays.toString(arr));

        /*
        홀수는 크기 순으로 정렬해서 내림차순으로 훑으면서 홀수 개의 사탕 묶음이 두 개를 볼 때마다 그 두개를 합쳐 결과에 저장
         */
        //배열 오름차순 정렬
        Arrays.sort(arr);

        //홀수 개의 사탕 묶음이 두 개씩 나오면 두 개를 합쳐줌
        for (int i= n-1 ; i >0;i-=2) {
            if (arr[i]%2 == 1 && arr[i-1]%2 ==1) {
                arr[i-1] += arr[i];
            }
        }

        //최대로 가져갈 수 있는 사탕의 개수 출력
        int sum = 0;
        for (int i=0 ; i<arr.length ;i++) {
            sum += arr[i];
        }
        if (sum % 2 == 0) {
            System.out.println(sum);
        } else {
            System.out.println(0);
        }

    }
}

아무 생각없이 작성한 코드.. 그리디/홀홀더하면짝 을 이용하려고 했는데 결과값이 안맞았다. 다시 생각

import java.io.*;
import java.lang.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        //사탕 묶음의 개수인 n을 입력 받음
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] arr = new int[n];

        //각각의 사탕 묶음에 담겨 있는 사탕의 개수를 입력받음
        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i=0 ; i<arr.length ; i++) {
            arr[i] = Integer.parseInt(st.nextToken());
        }
        //test.사탕 개수 확인
        System.out.println(Arrays.toString(arr));

        /*
        홀수는 크기 순으로 정렬해서 내림차순으로 훑으면서 홀수 개의 사탕 묶음이 두 개를 볼 때마다 그 두개를 합쳐 결과에 저장
         */
        //배열 오름차순 정렬
        Arrays.sort(arr);

        //홀수 개의 사탕 묶음이 두 개씩 나오면 두 개를 합쳐줌
        int output = 0, odd = 0;
        for (int i=n-1 ; i>=0 ; i--) {  //내림차순으로 시작
            if (arr[i] % 2 == 1) {  //홀수개라면 먼저 if문 돌려서
                if (odd > 0) {    //저장할 odd에 값이 있다면
                    output += odd + arr[i]; //현재 홀수개의 사탕묶음과 이전에 저장한 odd를 합쳐서 결과값에 저장
                    odd = 0;    //다시 0으로 초기화
                } else {
                    odd = arr[i];   //odd에 현재 사탕 묶음의 개수 저장
                }
            } else {    //짝수면 바로 결과값에 더하기
                output += arr[i];
            }
        }
        System.out.println(output);
    }
}

근데 이렇게 했더니 출력 초과가 떴다. 왜지 했는데, 내가 test용으로 해둔 코드까지 출력해서^_^ 지우니까 맞았다.

'coding study > baekjoon' 카테고리의 다른 글

[java] 19532. 수학은 비대면강의입니다  (0) 2023.07.28
[java] 23037. 5의 수난  (0) 2023.07.28
[java] 1085. 직사각형에서 탈출  (0) 2023.07.27
[java] 1284. 집주소  (0) 2023.07.27
[java] 2501. 약수 구하기  (0) 2023.07.26
Comments