728x90
반응형
문제:
도영이는 짜파구리 요리사로 명성을 날렸었다. 이번에는 이전에 없었던 새로운 요리에 도전을 해보려고 한다.
지금 도영이의 앞에는 재료가 N개 있다. 도영이의 각 재료의 신맛 S와 쓴맛 B를 알고 있다. 여러 재료를 이용해서 요리할 때, 그 음식의 신맛은 사용한 재료의 신맛의 곱이고, 쓴맛은 합이다.
시거나 쓴 음식을 좋아하는 사람은 많지 않다. 도영이의 재료를 적절히 섞어서 요리의 신맛과 쓴맛의 차이를 작게 만들려고 한다. 또, 물을 요리라고 할 수는 없기 때문에, 재료는 적어도 하나 사용해야 한다.
재료의 신맛과 쓴맛이 주어졌을 때, 신맛과 쓴맛의 차이가 가장 작은 요리를 만드는 프로그램을 작성하시오.
입력:
첫째 줄에 재료의 개수 N(1<=N<=10)이 주어진다. 다음 N개 줄에는 그 재료의 신맛과 쓴맛이 공백으로 구분되어 주어진다. 모든 재료를 사용해서 요리를 만들었을 때, 그 요리의 신맛과 쓴맛은 모두 1,000,000,000보다 작은 양의 정수이다.
출력:
첫째 줄에 신맛과 쓴맛의 차이가 가장 작은 요리의 차이를 출력한다.
풀이방법:
각 재료에 따라서 넣고 빼고 하는 작업을 재귀로 구현을 했다. mix라는 함수를 재귀적으로 호출하고, sour와 bitter의 배열의 크기를 줄여나가면서 재귀를 진행한다. 이 배열의 길이가 0이 될 때까지 반복하며, 결과값을 global 변수인 answer에 모두 담고, min 값을 출력한다.
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
|
def mix(sour,bitter,s,b):
global answer
if len(sour) == 0:
answer.append(abs(s-b))
return
for i in range(len(sour)):
mix(sour[i+1:],bitter[i+1:],s,b)
sTemp = s * sour[i]
bTemp = b + bitter[i]
mix(sour[i+1:],bitter[i+1:],sTemp,bTemp)
n = int(input())
sour = []
bitter = []
answer = []
for _ in range(n):
s,b = map(int,input().split())
sour.append(s)
bitter.append(b)
for i in range(n):
s = sour[i]
b = bitter[i]
mix(sour[i+1:],bitter[i+1:],s,b)
print(min(answer))
|
cs |
문제링크:
https://www.acmicpc.net/problem/2961
728x90
반응형
'Algorithm > Python' 카테고리의 다른 글
[BOJ]1717. 집합의 표현 (0) | 2020.08.20 |
---|---|
[BOJ]14502. 연구소 (0) | 2020.08.18 |
[Programmers]2020 Kakao. 자물쇠와 열쇠 (0) | 2020.08.11 |
[BOJ]2493. 탑 (0) | 2020.08.06 |
[BOJ]19532. 수학은 비대면강의입니다. (0) | 2020.08.04 |