백준 코딩연습

[백준] 블랙잭 (브루트포스 알고리즘)

작취 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해서 사용했는데 말도안되는 큰수만 나올수도 있어서 바로 빼버렸다.

알고리즘 문제를 풀 때 문제가 원하는것을 잘 파악하고 나처럼 뻘짓하지 말자..

반응형