본문 바로가기
PS/Baekjoon

[Baekjoon] 2309 - 일곱 난쟁이

by 서현 SEOHYEON 2023. 2. 18.

📝 문제

 

 

 

🔑 풀이 과정

① (순서없이) 9명중 7명을 뽑는 경우의 수 = 9명중 2명을 뽑는 경우의 수

만약 for문을 이용해 7명의 합을 더해 난쟁이 7명을 찾는것은 for문 7개를 사용해야 하므로 매우 복잡하다.

9명의 키의 합을 구한 뒤, 이중 for문을 사용해 두 명을 고른 뒤, 전체 키 합에서 두 명 키를 빼는 것이 더 효율적이다.

 

② 일곱 난쟁이의 키를 오름차순으로 출력해야 한다는 것. 입력을 받고 오름차순으로 정렬을 하자.

 

③ 첫 제출당시 틀렸습니다를 받고 질문게시판을 찾던중 발견한 글

여기서 2번을 내가 놓치고 있었다.

입력조건에서 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다고 되어있다.

첫 제출시 for문안에서 7명을 찾을 시 break를 하지 않아, 정답이 여러 가지일 경우 모두 출력하고 있었던 것

 

 

🔓 답안

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

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int[] arr = new int[9];

        int sum = 0;
        for(int i = 0; i < 9; i++){
            arr[i] = Integer.parseInt(br.readLine());
            sum += arr[i];
        }

        Arrays.sort(arr);

        int spy1 = 0;
        int spy2 = 0;
        loop:
        for(int i = 0; i < 8; i++){
            for(int j = i+1; j < 9; j++){
                if((sum - arr[i] - arr[j]) == 100){
                    spy1 = i;
                    spy2 = j;
                    break loop;
                }
            }
        }

        for(int i = 0; i < 9; i++){
            if((i == spy1) || (i == spy2))
                continue;
            else
                bw.write(arr[i] + "\n");
        }

        bw.flush();
        bw.close();

    }

}

 

 

 

🖤 알고리즘 분류

- 브루트포스 알고리즘

- 정렬

'PS > Baekjoon' 카테고리의 다른 글

[Baekjoon] 2023 - 신기한 소수  (0) 2023.02.20
[Baekjoon] 5543 - 상근날드  (0) 2023.02.19
[Baekjoon] 11047 - 동전 0  (0) 2023.02.17
[Baekjoon] 2839 - 설탕 배달  (0) 2023.02.16
[Baekjoon] 10986 - 나머지 합  (0) 2023.02.15

댓글