백준 코딩연습
[백준] 블랙잭 (브루트포스 알고리즘)
작취
2023. 12. 12. 18:06
반응형
https://www.acmicpc.net/problem/2798
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
백준 코딩연습 2798번 블랙잭 문제이다.
브루트 포스 알고리즘을 이용해서 구해야 한다.
브루트 포스 알고리즘
- 조합 가능한 모든 경우의 수를 대입해서 조합해보고 결과를 도출해내는 알고리즘
기존에 알고있던 블랙잭 규칙과는 다르지만 문제에서 요구하는 사항에 맞게 알고리즘을 짜보도록 하자.
조건
- 카드 장수 : 3 ≤ N ≤ 100 (사용자 입력)
- 구해야하는 3개수의 합 범위 : 10 ≤ M ≤ 300,000 (사용자 입력)
- 카드에 적힐 수 있는 수 : 100,000을 넘지 않는 양의 정수 (사용자 입력)
사용 언어 : python 3
def black_jack():
a, b = map(int,input().split())
arr = list(map(int,input().split()))
diff = 300000
final_point = 0
for i in range(a-2):
for j in range(i+1,a-1):
for k in range(j+1,a):
point = arr[i]+arr[j]+arr[k]
if b - point >= 0 and b - point < diff:
diff = b - point
final_point = point
else:
continue
print(final_point)
black_jack()
5 21
5 6 7 8 9
-----------
21
10 500
93 181 245 214 315 36 185 138 216 295
-----------
497
잘 나오는것을 확인할 수 있다.
처음엔 카드 뒤집었을때 나오는 수가 랜덤으로 정해야하는줄알고 random모듈을 import해서 사용했는데 말도안되는 큰수만 나올수도 있어서 바로 빼버렸다.
알고리즘 문제를 풀 때 문제가 원하는것을 잘 파악하고 나처럼 뻘짓하지 말자..
반응형