Hope Everyone Is Happy

[브론즈1] 2309. 일곱 난쟁이 (Java) 본문

※ 백준 (Baekjoon)/[Java] 문제 풀이 ( Solve the problems)

[브론즈1] 2309. 일곱 난쟁이 (Java)

J 크 2023. 7. 25. 16:40
728x90
반응형

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

 

2309번: 일곱 난쟁이

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

www.acmicpc.net

SSAFY 10기 화이팅~~ 합격 후기 언제올리지..


 문제는 아홉 명의 난쟁이 중 진짜 일곱 난쟁이를 찾는 문제로, 입력에 9명 난쟁이의 키가 주어졌을 때, 7명의 난쟁이들의 키의 합이 100이 되는 난쟁이들을 찾은 뒤, 해당 난쟁이 7명의 키를 오름차순으로 출력하는 문제입니다.

Example :

◈ Input

20
7
23
19
10
15
25
8
13

◈ Output

7
8
10
13
19
20
23

 해당 문제는 각 배열을 탐색할 수 있는 변수 2개를 만들어서 9개의 배열 (0~8번) 중 차례대로 (0,1)번 값 (난쟁이 두 명의 키)를 제외 후 더해보고 이후 순서대로 (0,2)번 제외, (0,3)번 제외~~ (1,2) 제외, (1,3) 제외~ 순서로 만들었습니다. 아래 코드에서는 (FirstPoint, SecondPoint)로 이해하시고 코드를 읽어보시면 조금 더 이해하는데 도움이 될 것 같습니다.

코드 작성 전, 아래와 같이 솔루션을 정리하였습니다.

입력된 Array를 오름차순으로 선 정렬 ( Arrays.sort 활용)

FirstPoint, SecondPoint를 활용하여 제외할 배열 값 2개를 정한 후 값을 더하여 100이 될 때 까지 탐색

탐색 방법 : FirstPoint = 0부터, SecondPoint= 1 부터 시작하여 SecondPoint 가 마지막 번호에 도달하면  FirstPoint++

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;

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[] arrDwarf = new int[9];
		for(int i = 0; i < 9; i++)
			arrDwarf[i] = Integer.parseInt(br.readLine());

		Arrays.sort(arrDwarf);
		int nSum =0;
		int nFirstPoint = 0;
		int nSecondPoint = 1;
		
		while(nFirstPoint < arrDwarf.length -1) {
			nSum = 0;
			for(int i = 0; i < 9; i++) {
				if(i != nFirstPoint && i != nSecondPoint)
					nSum += arrDwarf[i];
			}
			if(nSum == 100)
				break;
			
			nSecondPoint++;
			if(nSecondPoint == arrDwarf.length) {
				nFirstPoint++;
				nSecondPoint = nFirstPoint + 1;
			}
		}
		
		for(int i = 0; i < 9; i++) {
			if(i != nFirstPoint && i != nSecondPoint)
				bw.write((arrDwarf[i]) + "\n");
		}
		
		bw.flush();
		bw.close();
	}
}

 BufferedReader/Writer가 빨라져서 좋긴 한데, 코드가 지저분해지는 것 같아서 불편하네요. 갑자기 그리운 C++

긴 글 읽어주셔서 감사합니다!

Good Luck! (피드백 고맙습니다)