1. 문제
https://www.acmicpc.net/problem/2798
2798번: 블랙잭
첫째 줄에 카드의 개수 N(3 ≤ N ≤ 100)과 M(10 ≤ M ≤ 300,000)이 주어진다. 둘째 줄에는 카드에 쓰여 있는 수가 주어지며, 이 값은 100,000을 넘지 않는 양의 정수이다. 합이 M을 넘지 않는 카드 3장
www.acmicpc.net
2. 접근 방법
사실 3장만 뽑으면 되는거라 3중 for문 써도 되지만,
그냥 함수 만들어서 조합 만들 듯 합을 더해줬습니다.
3. 코드
python
def solution():
N, M = map(int, input().split())
nums = list(map(int, input().split()))
answer = 0
def make_sum(start, cnt, val):
nonlocal answer
if cnt == 3:
if val <= M:
answer = max(answer, val)
return
for i in range(start, N):
make_sum(i+1, cnt+1, val+nums[i])
make_sum(0, 0, 0)
print(answer)
solution()
4. 마치며
이 문제를 기록하는 이유는 문제 때문이 아니라
최근 중첩함수를 이용해서 문제 풀이를 진행하고 있는데
scope 관련해서 global외에 nonlocal을 쓰면 부모 함수의 변수에 접근 뿐만 아니라 값을 바꿀 수 있어서
처음으로 nonlocal 쓴 김에 올려봅니다요
https://dojang.io/mod/page/view.php?id=2365
파이썬 코딩 도장: 33.2 함수 안에서 함수 만들기
이번에는 함수 안에서 함수를 만드는 방법을 알아보겠습니다. 다음과 같이 def로 함수를 만들고 그 안에서 다시 def로 함수를 만들면 됩니다. def 함수이름1(): 코드 def 함수이름2():
dojang.io
'Algorithm > Python' 카테고리의 다른 글
[python] 17679 프렌즈4블록 - 카카오 2018 1차 (0) | 2021.07.03 |
---|---|
[python] 17684 압축 - 카카오 2018 1차 (0) | 2021.07.03 |
[백준 16926] 배열 돌리기1, 2 (0) | 2021.06.07 |
[LeetCode] 39. Combination Sum (0) | 2021.06.07 |
[LeetCode] 200. Number of Islands (0) | 2021.06.07 |