Python_알고리즘

[Python] 백준 2798 블랙잭

hahihuree 2021. 8. 6. 23:04
문제 바로가기

   문제분석   

# n개의 카드 중에서 3장을 골라 그 값의 합이 딜러가 외친 m과 같거나 가장 근접한 값을 찾아야 한다.

# 3장을 골라 조합해야하므로 삼중 반복문으로 풀이한다.

 

 

   문제풀이   

n, m = map(int, input().split()) 
cards = list(map(int, input().split()))

sum = []  # 각 조합으로 더한 값들을 저장
for i in range(n):
    for j in range(i+1, n):
        for k in range(j+1, n):
            card_sum = cards[i] + cards[j] + cards[k]
            if card_sum <= m:
                sum.append(card_sum)
print(max(sum))

# 카드의 갯수인 n과 딜러가 외친 카드의 합인 m을 입력값으로 받는다.

# n장의 카드 중에서 3장을 골라야 하므로 3중 반복문으로 완전탐색을 한다.

# n개의 카드를 반복문에서 하나씩 꺼내 쓸 수 있도록 리스트에 담는다.

# 각 조합으로 더한 값들을 저장하는 빈 리스트를 하나 초기화한다.

# n개 카드를 반복문을 돌리는데, i부터 시작하고

  • i이후부터 n까지 다시 한 장(j)을 뽑고
  • 다시 j이후부터 n까지 한 장(k)을 뽑는다.
  • 이때, 카드의 각각 i, j, k번째 인덱스의 합을 구하고 
  • 만약 그 합이 딜러가 외친 m보다 작거나 같다면 각 조합으로 더한 값을 저잘하기 위해 초기화 했던 sum리스트에 append해준다.
  • n개의 반복문이 모두 끝나면

# 조합들이 모인 sum리스트에서 가장 큰 값을 max를 이용해 출력한다.