본문 바로가기
코딩테스트

백준 2798번 블랙잭 파이썬 풀이

by fecu 2024. 12. 5.
728x90

브루트포스 알고리즘은 그냥 무식하게 들이박는다고 생각하면 된다.

 

우리는 넘치는게 시간이고 메모리인데 안될게 무엇?

 

일단 카드도 3장을 뽑는 것이니 for문을 3번 돌리면 된다.

 

다만 같은 카드를 뽑는 조건을 조심하자.

 

자세한건 아래에 넣었다.

 

더 자세한 설명은 귀찮으니 생략.

 

# sys.stdin.readline을 이용해 데이터를 받는다.
from sys import stdin
put = stdin.readline

# 카드의 수, 그리고 목표 숫자를 받는다.
# 카드 숫자들은 map으로 쪼갠 뒤, list로 변환한다.
numOfCard, targetNum = map(int, put().split())
cardLst = list(map(int, put().split()))

# 총합들과 차이를 저장한다.
totals = []
diff = []

# 3장의 카드가 필요하므로 3번의 for문을 돈다.
# 카드리스트에서 카드를 한장씩 뽑는다.
for i in cardLst:
    for j in cardLst:
        for k in cardLst:
        
        	# 문제는 같은 카드를 뽑을 수 있다는 것.
            # 같은 카드를 뽑으면 넘어간다.
            if i == j or i == k or j == k:
                continue
                
            # 총합을 구한다.
            # 총합이 목표 숫자보다 크면 넘어간다.
            total = i + j + k
            if targetNum - total < 0 :
                continue
                
            # 조건을 모두 통과하면 총합과 차이값을 저장한다.
            totals.append(total)
            diff.append(targetNum - total)
            
# 차이값들 중 최솟값의 인덱스를 구한다. 
# totals에서 최솟값의 인덱스를 넣어 출력한다.
print(totals[diff.index(min(diff))])

 

728x90