알고리즘/백준

백준-2309번/일곱 난쟁이 (java)

연향동큰손 2024. 6. 25. 17:10

 

 

이 문제는 브루트포스 알고리즘에 대해서 숙지하고 풀어야 하는 문제이다.

 

브루트포스 알고리즘이란?

- 무차별 대입법이라고도 하며 조합 가능한 모든 경우를 하나씩 대입해 보는 알고리즘이다.(노가다)

특징으로는 모든 경우를 탐색하므로 정확도 100%를 보장하지만 비효율적이다.

 

 

-문제 풀이

 

일곱난쟁이 입력 = 9명 

9명에서 7명을 뽑았을때 키의 합 = 100

브루트 포스 알고리즘으로 7명의 키 합이 100인 경우를 추출


        for(int i=0; i<8; i++){
            for(int j=i+1; j<9; j++){
                if(sum-arr[i]-arr[j]==100){
                    arr[i]=0;
                    arr[j]=0;
                    Arrays.sort(arr);
                    for(int k=2; k<9; k++){
                        System.out.println(arr[k]);
                    }
                    return;
                }
            }
         }

i번째 와 j번째 난쟁이의 키를 전체 합에서 뺐을때 100이면 i와 j번째 난쟁이의 키를 0으로 만들어주고 정렬 후 i와 j를 건너뛴 2부터 배열을 출력해준다.

 

(j가 i+1부터인 이유 : 이 전에 검색하고 넘어간 경우이기 때문)

 

 

 

 

 

 

 

<정답 코드>

import java.util.Arrays;
import java.util.Scanner;

public class Problem2309 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[] arr = new int[9];
        int sum=0;
        for(int i=0; i<9; i++) {
            arr[i]=scanner.nextInt();
            sum+=arr[i];
        }

        for(int i=0; i<8; i++){
            for(int j=i+1; j<9; j++){
                if(sum-arr[i]-arr[j]==100){
                    arr[i]=0;
                    arr[j]=0;
                    Arrays.sort(arr);
                    for(int k=2; k<9; k++){
                        System.out.println(arr[k]);
                    }
                    return;
                }
            }
        }



    }
}

'알고리즘 > 백준' 카테고리의 다른 글

백준-1476번/날짜 계산 (java)  (1) 2024.06.26
백준-3085번/사탕 게임 (java)  (0) 2024.06.25
백준-2156번/포도주 시식 (java)  (2) 2024.02.28
백준-11057번/오르막 수 (java)  (0) 2024.02.23
백준-1309번/동물원 (java)  (1) 2024.02.23