본문 바로가기

카테고리 없음

[BOJ] 백준 2798 파이썬 - 블랙잭

728x90

 

흔히 아는 포커의 블랙잭을 코드로 구현하는 문제입니다.

 

포커의 블랙잭과 다른 점은 포커는 21로 고정된 반면

이 문제는 직접 대입한 숫자를 넘지 않는 최대 숫자를 찾는 문제입니다.

 

조합하는 카드의 개수는 3장입니다.

 

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


numList = list(map(int, input().split()))
if len(numList) > n:
    numList = numList[:n]

우선 카드의 개수 n과 저희가 접근하고자 하는 최댓값 m을 input으로 받아줍니다.

그다음 줄에는 저희가 사용하고자 하는 카드를 n개만큼 입력받아 numList에 저장합니다.

 

if문은 만약 실수로 카드를 n개 이상 입력받았을 시

n장 까지만 저장되도록 슬라이싱 해주는 역할을 합니다.

 

answer = []
for i in range(len(numList)-2):
    for j in range(i+1, len(numList)-1):
        for k in range(j+1, len(numList)):
            a = numList[i]+numList[j]+numList[k]
            if a <= m:
                answer.append(a)

이제 카드 3장을 조합해야 하는데

for문을 3 중첩을 하여 3가지로 뽑을 수 있는 모든 경우를 탐색해 줍니다.

 

그중 3장의 카드의 합이 입력했던 m값 보다 작은 경우 answer 리스트에 append 해줍니다.

 

마지막으로, 답을 내기 위해 answer 리스트 안에서 최댓값을 출력해주면 답이 나옵니다.

print(max(answer)

 

 

[전체 코드]

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


numList = list(map(int, input().split()))
if len(numList) > n:
    numList = numList[:n]

answer = []
for i in range(len(numList)-2):
    for j in range(i+1, len(numList)-1):
        for k in range(j+1, len(numList)):
            a = numList[i]+numList[j]+numList[k]
            if a <= m:
                answer.append(a)

print(max(answer))
728x90