본문 바로가기
백준

[백준] 3040번 : 백설 공주와 일곱 난쟁이 – JAVA [자바]

by Hongwoo 2022. 8. 9.
반응형

https://www.acmicpc.net/problem/3040

 

3040번: 백설 공주와 일곱 난쟁이

매일 매일 일곱 난쟁이는 광산으로 일을 하러 간다. 난쟁이가 일을 하는 동안 백설공주는 그들을 위해 저녁 식사를 준비한다. 백설공주는 의자 일곱개, 접시 일곱개, 나이프 일곱개를 준비한다.

www.acmicpc.net

 


  • 문제

 


  • 문제 풀이

백준 3040번 백설 공주와 일곱 난쟁이는 브론즈 2 난이도의 브루트 포스 문제이다. 이 문제에서는 아홉 난쟁이의 키가 입력으로 주어진다. 하지만 이 중에 두 명의 난쟁이는 백설공주의 난쟁이가 아니다. 백설공주의 일곱 난쟁이의 숫자의 합은 무조건 100이 된다. 이때 백설공주의 일곱 난쟁이의 숫자를 출력하면 된다.

 

이 문제는 간단한 int형 배열을 이용해서 풀 수 있다. 우선 크기가 9인 배열 arr을 선언하고 입력받는 난쟁이의 숫자들을 이 배열에 저장해준다. 그리고 아홉 난재이의 숫자 합을 int형 변수 sum에 저장한다.

 

이제 진짜 난쟁이가 아닌 두 난쟁이의 숫자를 찾으면 된다. 즉, sum에서 이 가짜 난쟁이의 숫자들을 빼주면 100이 된다. 그러므로 이중 for 문을 이용해서 가짜 난쟁이의 숫자를 찾는다. 이건 (sum - 가짜 난쟁이의 숫자 합 == 0)로 구할 수 있다. 가짜 난쟁이의 숫자를 찾으면 배열에서 가짜 난쟁이의 수를 0으로 갱신해준다.

 

그다음에 배열을 순회하면서 0이 아닌 값들을 출력해주면 된다.

 

위에 로직을 코드로 옮긴 것은 밑에 있는 코드와 같다.

 


  • 코드

 

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] arr = new int[9];
        int sum = 0;  //9 난쟁이의 숫자 합
        for (int i = 0; i < 9; i++) {
            arr[i] = Integer.parseInt(br.readLine());
            sum += arr[i];
        }
        for (int i = 0; i < 8; i++) {
            for (int j = i+1; j < 9; j++) {
                int current = arr[i] + arr[j];
                //두 난쟁이의 숫자를 합에서 뺐을 때 100이 될 때
                if (sum - current == 100) {
                    arr[i] = 0;
                    arr[j] = 0;
                    for (int k = 0; k < 9; k++) {
                        if (k != i && k != j) System.out.println(arr[k]);
                    }
                }
            }
        }
    }
}

 

 

반응형

댓글