일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- BFS
- Algorithm
- Brute Force
- django
- Code Refactoring
- 힙
- 동적계획법
- 카카오 기출
- DFS
- Dynamic Programming
- DP
- graph
- 백준
- Queue
- 그래프
- 완전탐색
- DVWA
- programmers
- sort
- 문자열
- 프로그래머스
- 코딩테스트
- 알고리즘
- 탐욕법
- 큐
- string
- 정렬
- binary search
- Greedy
- heap
Archives
- Today
- Total
생각과 고민이 담긴 코드
백준 - 물건 팔기 (정렬, 완전 탐색) / Silver 3 / 1487번 본문
문제 : https://www.acmicpc.net/problem/1487
1487번: 물건 팔기
첫째 줄에 최대 이익을 만들어주는 가격을 출력한다. 이익이 최대인 가격이 여러개라면, 가장 낮은 가격을 출력한다. 또, 어떤 가격으로 팔아도 이익을 남길 수 없다면 0을 출력한다.
www.acmicpc.net
풀이
import sys
n = int(sys.stdin.readline())
cost = []
for _ in range(n): # [가격, 배달비] 형태로 생성.
temp = list(map(int, sys.stdin.readline().split()))
cost.append([temp[0], temp[1]])
cost.sort(key=lambda x: (x[0], x[1])) # 가격, 배달비 순으로 정렬.
total = [0] * n # 가격이 n일 때의 총이익.
for i in range(n):
for j in range(i, n): # 기준 가격 n
benefit = cost[i][0] - cost[j][1] # 가격은 기준 가격이지만 배달비는 원래 정해진대로.
if benefit > 0: # 이득일 경우에만 판다.
total[i] += benefit
result = [cost[i][0] for i in range(n) if total[i] == max(total)] # 최대 이익을 내는 기준 가격들 다모은다.
if sum(total) == 0: # 이익을 내는 경우가 없다.
print(0)
else:
print(min(result)) # 최대 이익을 내는 기준 가격 중 제일 낮은거 출력.
[[가격1, 배달비1], [가격2, 배달비2], .....] 형태로 가격과 배달비를 하나로 묶어줘야 했으며
기준을 가격, 배달비 순으로 정렬 수행했다.
그래야 기준 가격보다 높은 것들을 기준 가격과 동일하게 처리할 수 있기 때문이다.
다만 배달비는 원래 배달비를 빼줘야 한다.
모든 경우에 이익이 0보다 작은 경우에는 total 배열에 변화가 없도록 구현하였다.
'Algorithm > 백준' 카테고리의 다른 글
백준 - 연구소 (DFS, BFS, 완전탐색) / Gold 5 / 14502번 (0) | 2021.11.17 |
---|---|
백준 - 트리의 부모 찾기 (DFS, BFS) / Silver 2 / 11725번 (0) | 2021.11.17 |
백준 - 연산자 끼워넣기 (완전 탐색) / Silver 1 / 14888번 (0) | 2021.11.02 |
백준 - 가장 큰 증가 부분 수열 (Dynamic Programming) / Silver 2 / 11055번 (0) | 2021.10.28 |
백준 - 카드세트 (문자열) / Silver 5 / 11507번 (0) | 2021.10.27 |