[백준] 2798번 : 블랙잭 (파이썬)





문제





나의 답안

n,m=map(int,input().split())
a=list(map(int,input().split()))
le=len(a)
sl=[]
for i in range(0,le-2):
    for j in range(i+1,le-1):
        for k in range(j+1,le):
            s=a[k]+a[j]+a[i]
            if s<=m:
                sl.append(s)
print(max(sl))

완전 탐색 문제이다.
완전 탐색이란, 모든 경우의 수를 전부 탐색하는 것으로 예외가 존재하지 않는 탐색이다.
브루트 포스는 완전 탐색 중 비선형 구조를 가지는 너비 우선 탐색 문제로, 문제를 선형 구조화 시켜 접근한다.

  1. 3장의 카드를 뽑기 때문에 삼중 반복문을 사용한다.
  2. 따라서 첫번째 카드는 전체 카드 배열에서 나머지 두장을 빼고 접근할 것이기에, le-2까지 반복한다.
  3. 두번째 카드는 첫번째 카드 다음부터(i+1) le-1까지 접근한다.
  4. 세번째 카드는 두번째 카드 다음부터(j+1)부터 le까지 접근한다.
  5. 세번째 카드까지 접근한 후, 세장의 카드값을 합해 변수 s에 저장한다. 만약 합한 값이 m보다 같거나 작다면 해당 값을 배열에 저장한다.
  6. 해당 합을 전부 구한다면, 배열에 저장된 값 중 가장 큰 값을 구해 출력 한다.

좋은 웹페이지 즐겨찾기