반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 코딩테스트
- Spark
- 여행
- bigdata engineer
- 개발
- 삼성역맛집
- BFS
- Trino
- HIVE
- 영어
- Iceberg
- BigData
- java
- 자바
- 코딩
- 프로그래머스
- apache iceberg
- bigdata engineering
- Data Engineering
- 코엑스
- 용인맛집
- Data Engineer
- 백준
- 알고리즘
- hadoop
- dfs
- 맛집
- 코엑스맛집
- 코테
- 양평
Archives
- Today
- Total
지구정복
[브루트포스] 백준 - 일곱 난쟁이 본문
728x90
반응형
https://www.acmicpc.net/problem/2309
2309번: 일곱 난쟁이
아홉 개의 줄에 걸쳐 난쟁이들의 키가 주어진다. 주어지는 키는 100을 넘지 않는 자연수이며, 아홉 난쟁이의 키는 모두 다르며, 가능한 정답이 여러 가지인 경우에는 아무거나 출력한다.
www.acmicpc.net
-문제해설
처음에는 처음부터 일일히 다 더해보려고 했다. 예를들면
arr배열에 아홉 난쟁이의 키가 있다고 하면 아래 숫자는 arr의 인덱스를 나타낸다.
1 2 3 4 5 6 7
1 2 3 4 5 6 8
1 2 3 4 5 6 9
1 2 3 4 6 7 8
1 2 3 4 6 7 9
1 2 3 4 6 8 9
1 2 3 5 6 7 8
1 2 3 5 6 7 9
.....
하지만 이를 구현하는게 굉장히 까다로웠다. 결국 질문검색에서 힌트를 보고 풀 수 있었다.
처음에 난쟁이 키를 입력받을 때 전체 값을 sum에 더해서 아홉난쟁이 키의 합을 구한다.
그리고 출력조건에 오름차순으로 출력해야하니깐 미리 arr배열을 오름차순으로 정렬하고
이중 포문을 돌면서
sum - ( 첫번째 인덱스 + 두번째 인덱스 ) == 100 인 경우를 찾는다.
위 조건을 만족하는 첫 번째와 두 번째 인덱스를 찾은 경우 변수 a와 b에 해당 인덱스값을 저장한다.
그리고 arr배열을 포문으로 순회하면서 인덱스값이 a와 b가 아닌 값들만 출력한다.
-자바
package bruteforce;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class BJ2309 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] arr = new int[9];
int sum = 0;
for( int i=0; i<9; i++ ) {
arr[i] = Integer.parseInt( br.readLine() );
sum += arr[i];
}
Arrays.sort( arr );
int a = 0, b = 0;
l:for( int i=0; i<arr.length; i++ ) {
for( int j=i+1; j<arr.length; j++ ) {
if( sum - (arr[i]+arr[j]) == 100 ) {
a = i; b = j;
break l;
}
}
}
StringBuilder sb = new StringBuilder();
for( int i=0; i<arr.length; i++ ) {
if( i == a || i == b ) continue;
sb.append( arr[i] ).append( "\n" );
}
System.out.println( sb );
}
}
-파이썬
from sys import stdin
input = stdin.readline
arr = []; hap = 0
for i in range( 9 ):
arr.append( int( input() ) )
hap += arr[i]
arr.sort()
bre = False
for i in range( len(arr) ):
for j in range( i+1, len(arr) ):
if hap - ( arr[i] + arr[j] ) == 100:
for k in range( len(arr) ):
if k == i or k == j: continue
else: print( arr[k] )
bre = True
break
if bre: break
728x90
반응형
'데이터 엔지니어링 정복 > Algorithm' 카테고리의 다른 글
[수학] 백준 - 수 이어쓰기 1 (0) | 2021.08.23 |
---|---|
[브루트포스] 백준 - 사탕 게임 (0) | 2021.08.22 |
[수학] 백준 - 골드바흐의 추측 (0) | 2021.08.20 |
[수학] 백준 - 약수의 합 (0) | 2021.08.20 |
[수학] 백준 - 약수의 합2 (2) | 2021.08.20 |
Comments