응애개발자
article thumbnail
728x90

문제

 

2309번: 일곱 난쟁이

아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.

www.acmicpc.net


 

접근 방법

  1. 브루트 포스로 9개중 2개를 빼면서 풀 수 있다.
  2. 투포인터로 풀 수 있다.

 

코드 1. 브루트포스

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

public class Main {
    private static StringBuilder sb;
    private static BufferedReader br;
    private static int[] arr;
    private static int sum = 0;

    //입력
    public static void input() throws Exception {
        br = new BufferedReader(new InputStreamReader(System.in));
        sb = new StringBuilder();

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

        Arrays.sort(arr);
    }
    
    //과정
    public static void process() {
        outer : for(int i = 0 ; i < 8; i++){
            for(int j = i+1 ; j < 9 ; j++){
                if(sum-arr[i]-arr[j] == 100){
                    for(int k = 0 ; k < 9 ; k++){
                        if( i==k || j ==k ) continue ;
                        sb.append(arr[k]).append("\n");
                    }
                    break outer;
                }
            }
        }
        System.out.println(sb.toString());
    }


    public static void main(String[] args) throws Exception {
        input();
        process();
    }
}

코드 2. 투 포인터

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

public class Main {
    private static StringBuilder sb;
    private static BufferedReader br;
    private static StringTokenizer st;
    private static int[]arr = new int[9];
    private static int sum = 0;

    //입력
    public static void input() throws Exception {
        br = new BufferedReader(new InputStreamReader(System.in));
        sb = new StringBuilder();

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

        Arrays.sort(arr);
    }

    //실행
    public static void process() {
        int s = 0;
        int e = 8;

        while(s<e){
            int tmp = sum-arr[s]-arr[e];

            if(tmp == 100){
                for(int i = 0 ; i < 9; i++){
                    if(i == s || i == e) continue;
                    sb.append(arr[i]).append("\n");
                }
                break;
            } else if (tmp < 100) {
                e--;
            } else if (tmp > 100) {
                s++;
            }
        }
        System.out.println(sb.toString());
    }


    public static void main(String[] args) throws Exception {
        input();
        process();
    }
}
profile

응애개발자

@Eungae-D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!