2798번: 블랙잭 [Python]

백준 알고리즘의 2798번 문제이다.


  1. 일단 되게는 하자

3중 For문을 이용하기로 했다. 학교에서 배운 바로는 for문은 2중 For문 부터 효율성이 떨어진다고 배웠다. 그러나 일단은 되게 하자. 3중 For문에서 M 이하의 값 중 가장 큰 값을 구하는 방법이다. 말그대로 모든 경우의 수를 따져본다.

N, M = map(int, input().split(" ")) # 입력
num = list(map(int, list(input().split(" "))))
ans = 0
n = 1

for i in num:
    for j in num[n:]:   # num[n:] 중복 제거
        tmp = num[n:]
        tmp.remove(j)
        for k in tmp:   # tmp 중복 제거
            if (i + j + k) == M:   # 같으면 탈출. 없어도 답은 나올 것 같다. 
                ans = i + j + k
                break
            elif ans < (i + j + k) < M: # M 보다 작고 합이 가장 큰
                ans = i + j + k
    n += 1

print(ans)

중복을 제거하면 조금 더 개선시킬 수는 있을 것 같다.

--2021-07-06--

좋은 웹페이지 즐겨찾기