본문 바로가기
IT/알고리즘

1일 N알고리즘 - #33

by Sungjun_ 2020. 6. 1.

문제

https://www.acmicpc.net/problem/2798

 

2798번: 블랙잭

문제 카지노에서 제일 인기 있는 게임 블랙잭의 규칙은 상당히 쉽다. 카드의 합이 21을 넘지 않는 한도 내에서, 카드의 합을 최대한 크게 만드는 게임이다. 블랙잭은 카지노마다 다양한 규정이 ��

www.acmicpc.net

문제는 위 사이트를 참고해주세요.

 


풀이

N, M = map(int, input().split())
cardNum = list(map(int, input().split()))
tempList = []
for i in range(len(cardNum)-2):
    for j in range(i+1, len(cardNum)-1):
        for z in range(j+1, len(cardNum)):
            total = cardNum[i] + cardNum[j] + cardNum[z]
            if total <= M:
                tempList.append(total)
if len(tempList) != 0:
    print(max(tempList))

 

먼저 카드 수와 기준 값을 넣어줍니다.

그리고 N장의 카드를 입력받아 리스트에 넣어주니다.

 

총 3개의 for문이 있는데 5장의 카드가 있다고 가정했을 때

세 수를 중복없이 더하려면 첫 수는 가장 뒤에있는 수 두개를 빼주어야 하기때문에 범위를 -2를 해줍니다.

두 번째 수는 범위를 -1 해주고 시작 값을 첫 for문의 +1값으로 해줍니다.

세 번째 수는 범위를 그대로 리스트의 길이만큼 해주고, 시작 값을 두 번째 for문의 +1값으로 해줍니다.

 

그리고 if문으로 기준 값보다 작거나 같은 수만 tempList에 넣어주고

만약 tempList가 비워져있으면 아무것도 출력을 하지 않고

비워져있지 않다면 tempList에서 가장 큰 값을 출력해줍니다.

 

중간에 print를 넣어서 확인해보면

 

중복없이 제대로 더해지는 것을 볼 수 있습니다.

 


결과

결과 화면

'IT > 알고리즘' 카테고리의 다른 글

1일 N알고리즘 - #35  (0) 2020.06.02
1일 N알고리즘 - #34  (0) 2020.06.01
1일 N알고리즘 - #32  (0) 2020.05.31
1일 N알고리즘 - #31  (0) 2020.05.28
1일 N알고리즘 - #30  (0) 2020.05.28

댓글