반응형
Notice
Recent Posts
Recent Comments
Link
지구정복
[브루트포스] 백준 - 블랙잭 본문
728x90
반응형
https://www.acmicpc.net/problem/2798
-문제해설
입력값인 카드의 개수 n과 주어진 카드 3장을 더해서 최대한 가깝게 만들어야 되는 수 m이 주어지면
출력값으로는 가장 m과 가까운 수를 출력하는 문제이다.
나는 단순하게 주어진 카드를 모두 비교하는 방법으로 문제를 해결했다.
먼저 한 번 반복시 담을 sum 변수와 최종적인 답이 담길 ans 변수를 선언하고
i, j, k 변수를 이용해서 삼중 포문을 돌린다.
sum에는 3장의 카드값이 더해진다.
sum = arr[i] + arr[j] + arr[k]
이때 i, j, k값은 중복되면 안되므로
i==j일 때 continue
k==i or k==j일 때 continue를 해서 중복되지 않도록 한다.
그리고 sum값이 입력값 m보다 클 때는( sum > m ) continue로 다음 순회로 넘어가고
sum과 m이 같을 때 ( sum == m ) 는 곧바로 삼중포문을 빠져나온다.
이외의 경우에는 m-sum 과 m-ans 값을 비교해서 m-sum이 더 작을 경우 ans를 sum으로 초기화한다.
( m-sum <= m-ans )
-자바
package bruteforce;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class BJ2798 {
private static BufferedWriter bw =
new BufferedWriter( new OutputStreamWriter(System.out));
private static int n, m, sum, ans;
private static int[] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer( br.readLine() );
n = Integer.parseInt( st.nextToken() );
m = Integer.parseInt( st.nextToken() );
arr = new int[n];
st = new StringTokenizer( br.readLine() );
for( int i=0; i<n; i++ ) arr[i] = Integer.parseInt( st.nextToken() );
l:for( int i=0; i<n; i++ ) {
for( int j=1; j<n; j++ ) {
if( j==i ) continue;
for( int k=2; k<n; k++ ) {
if( k==i || k==j ) continue;
sum = arr[i] + arr[j] + arr[k];
if( sum > m ) continue;
else if( sum == m ) {
ans = sum;
break l;
} else if( m-sum <= m-ans ) ans = sum;
}
}
}
bw.write( ans + "\n" );
bw.flush();
bw.close();
br.close();
}
}
-파이썬
n, m = map(int, input().split())
arr = list( map(int, input().split()) )
sum = 0; ans = 0; isBreak = False
for i in range( n ):
for j in range( 1, n ):
if i==j: continue
for k in range( 2, n ):
if k==i or k==j: continue
sum = arr[i]+arr[j]+arr[k]
if sum > m: continue
elif sum == m:
ans = sum; isBreak = True; break
elif m-sum <= m-ans: ans = sum
if isBreak: break
if isBreak: break
print( ans )
728x90
반응형
'데이터 엔지니어링 정복 > Algorithm' 카테고리의 다른 글
[문자열] 백준 - 팰린드롬수 (0) | 2021.07.24 |
---|---|
[해쉬] 백준 - Hashing (0) | 2021.07.24 |
[수학] 백준 - 부녀회장이 될테야 (0) | 2021.07.23 |
[수학] 백준 - 벌집 (0) | 2021.07.23 |
[브루트포스] 백준 - 분해합 (0) | 2021.07.22 |
Comments