본문 바로가기
코딩테스트/백준 알고리즘 풀이

[백준 알고리즘/python] 백준 2798번 블랙잭, 파이썬

by Godgil 2020. 5. 1.

백준 알고리즘 2798번 블랙잭,파이썬

 

이번 문제는 백준 알고리즘의 2798번 블랙잭을 파이썬으로 풀어보았다.

 

브루트포스에 있는 문제이다.

브루트포스는 자원이 충분하다고 가정하면 가장 무서운 알고리즘인데, 그 이유느 성공률이 100%를 자랑한다.

코드를 잘 보면 알겠지만, 그냥 경우의 수를 다 때려박는 노가다 알고리즘이다.

 

문제조건

#1. 첫째줄에는 카드의 개수 N과 넘지 않아야하는 수 M이 주어진다

#2. 둘째줄에는 카드의 번호가 주어진다

#3. 카드를 3장을 뽑아서 넘지 않으면서 가장 가까운 카드의 합을 출력한다.

 

문제 자체는 간단하다.

 

문제에 대한 내 생각이다

#생각1. 브루트포스는 노가다 알고리즘이니까, 카드가 3개있으니 for문을 3중으로 돌려서 다 경우의수를 다 때려 박는다.

#생각2. 3장의 합이 21을 넘어가면 그냥 continue를 사용하고, 넘지 않는다면 이때까지 중첩된 sum중 가장 큰값을 저장한다.

 

나는 이렇게 생각하고 코드를 써 내려갔다.

 

N, M = map(int, input().split())
sum = 0
lst = list(map(int,input().split()))
for i in range(N-2):
    for j in range(i+1,N-1):
        for k in range(j+1,N):
            if lst[i] + lst[j] + lst[k] > M:
                continue
            else:
                sum = max(sum,lst[i] + lst[j] + lst[k])

print(sum)

 

 

 

조금 헷갈렸던점은, 역시 인덱스에 관해서이다.

이 부분은 많이 하는게 답인가 싶기도 한데, 충분히 푼 것 같은데도 자주 헷갈린다.

하나씩 i,j,k값을 적어보면서 관계를 잘 찾아보는게 답인듯 싶다.

하나하나 차근차근 해야할 것 같다.

 

 

댓글