소스 코드
def check(temp_sum, idx):
global res
# n == idx는 끝까지 확인했다는 뜻
# height의 index는 n-1이 끝이기 때문
if n != idx:
# 현재까지의 합이 선반의 높이보다 작은 경우
if temp_sum < b:
check(temp_sum,idx+1)
check(temp_sum+height[idx],idx+1)
# 그 외의 경우
else:
# 현재까지의 최소 값보다 현재까지의 합이 작은 경우
if temp_sum < res:
res = temp_sum
return
# 끝까지 확인한 경우
else:
# 현재까지의 최소 값보다 현재까지의 합이 작은 경우
if b <= temp_sum < res:
res = temp_sum
return
return
T = int(input())
for tc in range(1,1+T):
# 점원의 수, 선반의 높이
n,b = map(int,input().split())
# 점원들의 키
height = list(map(int,input().split()))
# 결과 저장
res = 2000000
# 지금까지의 합, 현재 idx 값
check(0,0)
print('#{} {}'.format(tc,res-b))
해결 방법
1. 조합 문제라 판단하고 접근
2. n의 최대값은 20, 직원의 높이를 이용할지 말지를 선택(2가지 선택지) => 최악의 경우의 수는 2^20 => 완전탐색 + 가지치기로 해결
3. 탈출 조건은 1) 마지막 직원까지 확인한 경우(index == n인 경우), 2) 현재까지의 합이 선반의 높이보다 큰 경우
4. 해당 위치(index)의 직원의 높이를 더할지 말지를 결정해야 함
=> check(현재까지의 직원들의 높이의 합+현재 위치(index)의 직원의 높이, index+1) 더한 경우,
check(현재까지의 직원들의 높이의 합, index+1) 더하지 않은 경우로 나눠서 재귀 호출
느낀 점
처음에 return을 사용하지 않아서 깊이 오류가 났는데... 이런 실수를 하지말자 ㅠㅠ
ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.
'코딩 문제해결 > 문제 풀이.SWEA' 카테고리의 다른 글
[SWEA 코딩] S/W 문제해결 응용 K번째 문자열 - PYTHON #1257 (0) | 2021.06.12 |
---|---|
[SWEA 코딩] S/W 문제해결 응용 이미지 유사도 검사 - PYTHON #1264 (0) | 2021.06.11 |
[SWEA 코딩] 문자열 동화 - PYTHON #10202 (0) | 2021.06.09 |
[SWEA 코딩] 가랏! RC카! - PYTHON #1940 (0) | 2021.06.09 |
[SWEA 코딩] [SW 모의역량 테스트] 특이한 자석 - PYTHON #4013 (0) | 2021.06.08 |