반응형
리뷰
첫 번째 D4 문제 풀이였다. 비트 마스킹 문제는 경험한 적이 없어 그냥 선채로 죽었다. 어려웠다.
문제 풀이
모든 경우의 수를 구한 뒤 선반의 높이와 가장 가까운 값을 도출하고자 했다. 2중 for문을 사용해 제출했으나 정답 맞추기에 실패하였다.
결국 모든 경우의 수를 찾기 위해 비트마스킹 알고리즘을 사용한다는 것을 접하게 되었고 2 ** n 크기의 경우의 수에서 나올 수 있는 경우의 수를 모두 찾고 각 경우의 수에 선택된 점원의 합이 선반의 높이보다 크거나 같다면 해당 값을 현재 result 값과 비교하여 더 적다면 result를 갱신하도록 했다.
참고 사항
result의 초기값은 n의 최대 범위가 20이고 h의 최대 범위가 10000이므로 200001 이상으로 설정해 주면 된다.
정답 코드
def q1486():
# SWEA 1486번 D4 장훈이의 높은 선반 파이썬
t = int(input())
for i in range(1, t + 1):
n, b = map(int, input().split())
lst = list(map(int, input().split()))
result = 200001
for j in range(2 ** n):
temp = 0
for k in range(n):
if j & (2 ** k):
temp += lst[k]
if temp >= b:
result = min(result, temp)
print(f'#{i} {result - b}')
q1486()
728x90
반응형
'알고리즘 공부 > 파이썬(Python)' 카테고리의 다른 글
백준 14696번 딱지놀이 파이썬 (0) | 2024.06.26 |
---|---|
백준 2669번 직사각형 네개의 합집합의 면적 구하기 파이썬 (0) | 2024.06.26 |
SWEA 12712번 D2 파리퇴치3 파이썬 (0) | 2024.06.26 |
SWEA 1961번 D2 숫자 배열 회전 파이썬 (0) | 2024.06.26 |
SWEA 1959번 D2 두 개의 숫자열 파이썬 (0) | 2024.06.26 |