Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 파이썬
- 2020 카카오 인턴십
- SWEA
- GIT
- 최소 신장 트리
- 2021 KAKAO BLIND RECRUITMENT
- 프로그래머스
- 백준
- 스택
- 플로이드와샬
- 로봇 청소기
- BFS
- 크루스칼
- 2020 KAKAO BLIND RECRUITMENT
- 우선순위큐
- 투 포인터
- 다익스트라
- 플로이드 와샬
- 브루트포스
- 트라이
- Spring
- 구현
- 이분탐색
- 조합
- 백트래킹
- 비트마스킹
- 2018 KAKAO BLIND RECRUITMENT
- 2019 KAKAO BLIND RECRUITMENT
- 투포인터
- 시뮬레이션
Archives
- Today
- Total
개발조아
[BOJ/백준] 19942 다이어트 파이썬 본문
728x90
문제 링크 : https://www.acmicpc.net/problem/19942
브루트포스 문제이다.
재귀로도 할수 있겠지만 파이썬은 이미 아주 훌륭한 조합를 제공한다.
1개,2개,n개까지 뽑는 조합을 다 만들어서 조건을 만족시키고 합이 최소가 되는 것을 찾아서 출력했다.
그리고 중간이 합이 같다면 사전순으로 앞선것이 와야한다.
그래서 두개를 하나의 튜플로 만들어 정렬하고 앞에것을 저장했다.
from sys import stdin
from itertools import combinations
input = stdin.readline
n = int(input())
mp,mf,ms,mv = map(int, input().split())
board = [[]]
for _ in range(n):
p,f,s,v,c = map(int, input().split())
board.append((p,f,s,v,c))
def solv():
answer_c = 9875643210
answer = None
for cnt in range(1,n+1):
for comb in combinations(range(1,n+1),cnt):
tp=tf=ts=tv=tc=0
for target in comb:
tp += board[target][0]
tf += board[target][1]
ts += board[target][2]
tv += board[target][3]
tc += board[target][4]
if tp >= mp and tf >= mf and ts >= ms and tv >= mv:
if answer_c > tc:
answer_c = tc
answer = comb
elif answer_c == tc:
answer = sorted((answer,comb))[0]
if answer_c == 9875643210:
print(-1)
else:
print(answer_c)
print(*answer)
solv()
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 9202 Boggle 파이썬 (0) | 2021.09.29 |
---|---|
[BOJ/백준] 7682 틱택토 (0) | 2021.09.27 |
[BOJ/백준] 20165 인내의 도미노 장인 호석 파이썬 (0) | 2021.09.21 |
[BOJ/백준] 4577 소코반 파이썬 (0) | 2021.09.19 |
[BOJ/백준] 1662 압축 파이썬 (0) | 2021.09.19 |
Comments