[백준] 2798번 : 블랙잭

CHAEN·2022년 5월 9일
0

problem solving

목록 보기
22/33
post-thumbnail

문제

접근 방법

  • 카드 3개에 대한 조합 전부 구하기
  • 조합 중 가장 가까운 수 선택

나의 풀이

import itertools

# target과 가장 가까운 수를 찾는 함수
def findNearNum(arr, target):
    return sorted(arr, key=lambda x: abs(x-target))[0]

# 입력
n, target = map(int, input().split())
card = list(map(int, input().split()))

# 카드를 3장 고르는 조합 구한 후 합만 남기기
temp = list(itertools.combinations(card, 3))
temp = [sum(x) for x in temp]

while True:
    answer = findNearNum(temp, target)
    # target 보다 큰 수이므로 리스트에서 삭제
    if target - answer < 0:
        temp.remove(answer)
    else:
        break

print(answer)

이게 맞나?!
남들은 쉽게 푸는데 나만 어렵게 풀었나..?

다른 사람의 풀이

n, m = map(int, input().split())
num = list(map(int, input().split()))
l = len(num)
ans = 0
for i in range(0, l-2):
    for j in range(i+1, l-1):
        for k in range(j+1, l):
            if(num[i] + num[j] + num[k] > m):
                continue
            else:
                ans = max(ans ,num[i] + num[j] + num[k])

print(ans)

이 문제는 브루트 포스(brute force) 알고리즘으로 해결할 수 있다.
3개의 카드를 뽑는 것 이므로 삼중반복문을 통해 모든 경우의 수를 구한 뒤 문제가 요구하는 답을 찾을 수 있다.
위와 같은 방식으로 문제를 푼 사람들이 itertools 라이브러리를 이용해 간단하게 풀 수 있다고 내가 푼 것과 유사한 방식의 풀이를 함께 써놓기도 한다.
내 풀이가 심각하게 문제가 있는 것은 아닌 듯하다.

profile
공부중입니다

0개의 댓글

관련 채용 정보