반응형
https://www.acmicpc.net/problem/3040
3040번: 백설 공주와 일곱 난쟁이
매일 매일 일곱 난쟁이는 광산으로 일을 하러 간다. 난쟁이가 일을 하는 동안 백설공주는 그들을 위해 저녁 식사를 준비한다. 백설공주는 의자 일곱개, 접시 일곱개, 나이프 일곱개를 준비한다.
www.acmicpc.net
- 문제
- 문제 풀이
백준 3040번 백설 공주와 일곱 난쟁이는 브론즈 2 난이도의 브루트 포스 문제이다. 이 문제에서는 아홉 난쟁이의 키가 입력으로 주어진다. 하지만 이 중에 두 명의 난쟁이는 백설공주의 난쟁이가 아니다. 백설공주의 일곱 난쟁이의 숫자의 합은 무조건 100이 된다. 이때 백설공주의 일곱 난쟁이의 숫자를 출력하면 된다.
이 문제는 간단한 int형 배열을 이용해서 풀 수 있다. 우선 크기가 9인 배열 arr을 선언하고 입력받는 난쟁이의 숫자들을 이 배열에 저장해준다. 그리고 아홉 난재이의 숫자 합을 int형 변수 sum에 저장한다.
이제 진짜 난쟁이가 아닌 두 난쟁이의 숫자를 찾으면 된다. 즉, sum에서 이 가짜 난쟁이의 숫자들을 빼주면 100이 된다. 그러므로 이중 for 문을 이용해서 가짜 난쟁이의 숫자를 찾는다. 이건 (sum - 가짜 난쟁이의 숫자 합 == 0)로 구할 수 있다. 가짜 난쟁이의 숫자를 찾으면 배열에서 가짜 난쟁이의 수를 0으로 갱신해준다.
그다음에 배열을 순회하면서 0이 아닌 값들을 출력해주면 된다.
위에 로직을 코드로 옮긴 것은 밑에 있는 코드와 같다.
- 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] arr = new int[9];
int sum = 0; //9 난쟁이의 숫자 합
for (int i = 0; i < 9; i++) {
arr[i] = Integer.parseInt(br.readLine());
sum += arr[i];
}
for (int i = 0; i < 8; i++) {
for (int j = i+1; j < 9; j++) {
int current = arr[i] + arr[j];
//두 난쟁이의 숫자를 합에서 뺐을 때 100이 될 때
if (sum - current == 100) {
arr[i] = 0;
arr[j] = 0;
for (int k = 0; k < 9; k++) {
if (k != i && k != j) System.out.println(arr[k]);
}
}
}
}
}
}
반응형
'백준' 카테고리의 다른 글
[백준] 1159번 : 농구 경기 – JAVA [자바] (0) | 2022.08.09 |
---|---|
[백준] 2587번 : 대표값2 – JAVA [자바] (0) | 2022.08.09 |
[백준] 2476번 : 주사위 게임 – JAVA [자바] (0) | 2022.08.09 |
[백준] 2935번 : 소음 – JAVA [자바] (0) | 2022.08.09 |
[백준] 15894번 : 수학은 체육과목 입니다 – JAVA [자바] (0) | 2022.08.09 |
댓글