첫번째 코드
목표와 두 개의 숫자의 차이 중 차이가 작은 숫자를 불러오는 함수를 작성한 후,
3개의 숫자를 더해서 해당 숫자와 답으로 가정된 숫자와 비교 후 업데이트 하는 과정을 반복하여 코드를 작성하였다.
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
A = list(map(int, input().split()))
num = 0
diff1 = 0
diff2 = 0
answer = 0
def diff_min (x, y):
global m
diff1 = m - x
diff2 = m - y
if diff1 < diff2:
return x
else:
return y
for i in range(n):
if answer == m:
break
for j in range(i+1, n):
if answer == m:
break
for k in range(j+1, n):
num = A[i] + A[j] + A[k]
answer = diff_min(answer, num)
if answer == m:
break
print(answer)
틀림!
두번째 코드
"첫째 줄에 M을 넘지 않으면서 M에 최대한 가까운 카드 3장의 합" 이 부분에서 문제가 생겼을 것이다.
그렇기 때문에 만약에 세 숫자의 합이 m보다 크면 진행하지 않고 넘어가는 continue문을 사용해야겠다!
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
A = list(map(int, input().split()))
num = 0
diff1 = 0
diff2 = 0
answer = 0
def diff_min (x, y):
global m
diff1 = m - x
diff2 = m - y
if diff1 < diff2:
return x
else:
return y
for i in range(n):
if answer == m:
break
for j in range(i+1, n):
if answer == m:
break
for k in range(j+1, n):
num = A[i] + A[j] + A[k]
if num > m:
continue
answer = diff_min(answer, num)
if answer == m:
break
print(answer)
통과! :) 뭔가 뿌듯 호홍
링크