10775번 공항 G2
문제
지금 구두 수선공에게는 손님으로부터 주문받고 제작해야 할 작업이 N개 쌓여있다. 구두 수선공은 하루에 한 작업만 수행할 수 있고, i번째 작업을 완료하는 데 Ti일이 걸린다. 이때 Ti는 정수이고 1 ≤ Ti ≤ 1000이다. i번째 작업을 시작하기 전에 하루가 지연될 때마다 구두 수선공은 보상금 Si센트를 지불해야 한다. 이때 Si는 정수이고 1 ≤ Si ≤ 10000이다. 구두 수선공을 돕기 위해 최저 보상금을 지불하는 작업 순서를 정해야 한다. 하루에 2개 이상의 작업을 동시에 수행할 수 없다. 작업 i를 수행하고 있는 경우, 작업 i를 마칠 때까지 작업 i 외의 다른 작업을 수행할 수 없다.
입력
1 ≤ N ≤ 1000 범위의 정수 N이 첫 번째 줄에 주어진다. 다음 N개 줄에 걸쳐서 첫 번째 열에는 T1 … TN이 입력되며, 두 번째 열에는 S1 … SN이 주어진다.
출력
최소 보상금을 지불하는 작업 순서를 출력해야 한다. 모든 작업은 입력에서의 번호(1~N)로 표시해야 한다. 모든 정수는 한 줄로 표시해야 하며, 각 작업은 공백 문자로 구분한다. 여러 가지 해답이 나올 수 있다면 오름차순 정렬에 의해 가장 첫 번째 해답을 출력한다.
더보기
그리디 알고리즘, 정렬
탐욕적인 방법으로 풀이가 가능한 문제이다.
남아있는 작업 중 하루 당 지불 해야 하는 보상금이 큰 작업부터 진행했다.
더보기
import sys
N = int(sys.stdin.readline())
arr = []
for i in range(N):
Ti, Si = map(int, sys.stdin.readline().split())
arr.append([Si/Ti, i + 1])
arr.sort(key=lambda x:(-x[0], x[1]))
for i in range(N):
print(arr[i][1], end=' ')
'알고리즘 문제 풀이 > 백준' 카테고리의 다른 글
[전생했더니 슬라임 연구자였던 건에 대하여 (Hard)/G4/Python3/C++] (0) | 2024.11.25 |
---|---|
[파이프 옮기기 2/G4/Python3] (0) | 2024.11.24 |
[공항/G2/Python3/C++] (1) | 2024.11.22 |
[로봇 조종하기/G2/Python3] (0) | 2024.11.21 |
[서강그라운드/G4/Python3] (0) | 2024.11.19 |