-
[백준 2309] - [분할정복] 일곱 난쟁이 - JAVA알고리즘/분할정복(Divide and conquer) 2018. 11. 30. 10:56
문제 링크 : https://www.acmicpc.net/problem/2309
이문제는 의도하는바만 잘 파악하면 어렵지 않게 문제를 풀 수 있다.
입력은 무조건 9명의 난쟁이애 대한 키 정보이고
두명을 제외한 나머지의 키의 합이 무조건 100이 된다고 한다.
가능한 답이 여러가지일 경우 아무거나 출력하면 된다고하는데 이럴때는 100이 이루어지면 바로 종료시키고 출력시키면 된다.
문제를 푸는 방법은 두 난쟁이의 키를 전체 아홉 난쟁이 키의 총합에서 뺀 값이 100이면 두 난쟁이의 값을 최소 값으로 변경 시킨 후 정렬하고 출력시키면 된다.
일곱 난장이들의 키를 합하는 것보다 전체 합에서 두명의 키만 뺴는것이 더 바람직할것이기떄문에 두 난쟁이의 키만 빼면 된다.
소스
1234567891011121314151617181920212223242526272829303132333435363738import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Arrays;public class Main {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));int max = 100;int size = 9;int sum = 0;int[] dwarfs = new int[size];for(int i=0; i < size; i++) {dwarfs[i] = Integer.parseInt(br.readLine());sum += dwarfs[i];}boolean checked = false;for(int i=0; i < size; i++) {for(int j = i+1; j < size; j++) {if(sum - (dwarfs[i] + dwarfs[j]) == max) {dwarfs[i] = Integer.MIN_VALUE;dwarfs[j] = Integer.MIN_VALUE;checked = true;break;}if(checked) break;}}Arrays.sort(dwarfs);for(int dwarf:dwarfs) if(dwarf != Integer.MIN_VALUE) System.out.println(dwarf);br.close();}}cs '알고리즘 > 분할정복(Divide and conquer)' 카테고리의 다른 글
[백준 1074] - [분할정복] - Z (JAVA) (0) 2018.11.30 [백준 2263] - [분할정복] - 트리의 순회(java) (1) 2018.11.29 [백준 1992] - [분할정복] - 쿼드트리 (0) 2018.11.29 [백준 2749] - [분할정복 수학] - 피보나치 3 (0) 2018.11.28 [백준 2740] - [행렬]- 행렬 곱셈 (0) 2018.11.28 댓글