본문 바로가기
Algorithm problem solving/풀이

2798. 블랙잭_fail(3/4)_pass(4/10)_pythonic(22/2/6)

by Jiyoon-park 2020. 3. 4.

3/4_FAIL의 기록

아직 통과하지 못한 코드이다.

답은 나오는데 통과가 되질 않는다.
컴퓨터는 잘못이 없으니 내가 무엇인가를 잘못한거겠지😥

테스트 케이스가 한개밖에 공개되지 않아서 어디서 틀렸는지도 모르겠다 ㅠㅠ

아 뭐 하나만 바꾸면 될 거 같은데... 뭘 놓치고 있나

def f(n, k, m, summ): # 순열의 n번 원소 결정, 순열의 길이 k, 사용할 숫자 m개
    global max_val, M
    if summ > M:
        return
    if n == k:
        if summ >= max_val:
            max_val = summ
    else:
        for i in range(m):
            if used[i]==0:  # i번 원소가 사용되지 않았으면
                used[i] = 1 # 사용함으로 표시
                # p[n] = cards[i]
                f(n+1, k, m, summ+cards[i]) # n+1원소 결정
                used[i] = 0 # 다른 자리에서 사용하도록 풀어줌

N, M = map(int, input().split())
cards = list(map(int, input().split()))

used = [0]*N
p = [0]*3
max_val = 0
f(0,3,5,0)
print(max_val)

4/10_PASS

나는 바보였당ㅋㅋㅋㅋㅋ
f(0,3,5,0) 이라고 카드 숫자를 5로 지정해놓으니까 테스트케이스말고는 통과를 못하지ㅜㅠㅠ
f(0,3,n,0) 로 바꾸고 기분 좋게 통과!
fail한 문제를 pass로 넘길때 너무 신나.
테스트케이스가 하나 더 추가되어있었는데 덕분에 실수를 알아차릴 수 있었다.
행복하다.

def f(n, k, m, summ): # 몇번째 원소를 뽑는지, 총 몇개를, 몇개 안에서
    global maxV, wanted
    if summ > wanted:
        return
    if n == k:
        if maxV < summ:
            maxV = summ
    else:
        for i in range(m):
            if used[i] == 0:
                used[i] = 1
                p[n] = cards[i]
                f(n+1, k, m, summ+cards[i])
                used[i] = 0

n, wanted = map(int, input().split())
cards = list(map(int, input().split()))
used = [0]*n
p = [0]*3
maxV = 0
# n장 중 3장을 뽑는 경우의 수
f(0, 3, n, 0)
print(maxV)

 

22/2/6_pythonic_PASS

오랜만에 풀어보는 알고리즘~ 기록하자! 하고 블로그에 글쓰려니 이전에 써놨던 풀이법이 있넹... 파이써닉한 풀이법도 기록한다.

from itertools import combinations

N, M = map(int, input().split())
nums = list(map(int, input().split()))
comb = list(combinations(nums, 3))

maxx = 0
for c in comb:
  summ = sum(c)
  if summ == M: # 값이 M과 같다면 즉시 loop 빠져나오기
    maxx = M
    break
  if summ > M:
    continue
  else:
    if maxx < summ:
      maxx = summ

print(maxx)