9229. 한빈이와 Spot Mart
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
- 내 풀이
- 정렬 후 맨앞, 맨뒤값 합해가면서
- 합보다 넘어가면 lpoint -1
- 합보다 작거나 같으면 fpoint+1
#최대 무게 합 출력
#2봉지만 사야함
T=int(input())
for tc in range(1,T+1):
#과자봉지 개수n, 무게 합 제한 m
n,m=map(int,input().split())
snack=list(map(int,input().split()))
snack.sort()
ssum=0
fpoint=0
lpoint=n-1
while fpoint<lpoint:
print(fpoint, lpoint)
front=snack[fpoint]
last=snack[lpoint]
if front+last>m:
lpoint-=1
continue
#넘지않는 경우
ssum=max(ssum, front+last)
fpoint+=1
if ssum==0:
ssum=-1
print("#{} {}".format(tc, ssum))
- 다른 사람 풀이
- 수정할 필요없이 처음 생성 시 max=-1 해놓으면 됨
- 조합, dfs
- 여러개 중 2봉지만 조합해서 sum 계산
#최대 무게 합 출력
#2봉지만 사야함
T=int(input())
for tc in range(1,T+1):
#과자봉지 개수n, 무게 합 제한 m
n,m=map(int,input().split())
snack=list(map(int,input().split()))
maxSum=-1
def dfs(depth, sum, start):
global maxSum
if depth==2: #두봉지 선택되면
if sum>m:
return
maxSum=max(maxSum, sum)
return
for i in range(start, n):
dfs(depth+1, sum+snack[i], i+1)
dfs(0,0,0)
print("#{} {}".format(tc, maxSum))
'코딩테스트 > BOJ' 카테고리의 다른 글
| [백준] [BFS] 1325.효율적인 해킹 (0) | 2023.03.06 |
|---|---|
| 다시 풀어봐야할 문제 (0) | 2023.03.05 |
| [백준] [BFS] 2606. 바이러스 (0) | 2023.03.05 |
| [백준] [DFS] 20444. 색종이와 가위 (0) | 2023.03.04 |
| [백준] [BFS] 7576. 토마토 (0) | 2023.03.04 |