그리디 알고리즘문제
문제 해결
해당 문제는 이장님을 최대한 빨리 초대하기 위해 나무가 다 자라는데 걸리는 일 수가 높은 순서대로 나무를 심도록 내림차순 정렬,
묘목 하나를 심는데 걸리는 시간은 1일이기 때문에 인덱스, 값을 따로 더하면 해당 나무를 심고 다 자라는데 걸리는 시간들을 알 수 있다.
(insert(0,0)을 통해 0번 인덱스는 사용하지 않도록 함)
idx + value를 해당 나무를 심고 다 자라는데 걸리는 시간. 이 값의 최댓값이 모든 나무가 다 심고 끝나는 일 수. 그 다음 날에 이장님을 초대할 수 있으므로
최댓값에 1을 더해 출력하면 된다.
생각
인덱스과 값을 같이 생각하면 바로 풀 수 있었다. enumerate와 친해지자.
소스코드
import sys
sys.stdin = open("input.text", "rt")
N = int(input())
data = list(map(int, input().split())) #각 나무가 자라는데 걸리는 일
#각 묘목은 심는데 1일, 다 자라는데 걸리는건 개별
#나무를 심는 순서 정해서 최소날짜로 모두 자라게, 이장은 다음날에 초대
data.sort(reverse= True) #내림차순
data.insert(0, 0) #1번 인덱스부터 사용.
max_date = 0
for idx, value in enumerate(data):
if max_date < idx + value:
max_date = idx + value
print(max_date + 1) #나무가 다 자란 다음날 이장님 초대
다른 코드
n = int(input())
data = list(map(int, input().split()))
data.sort(reverse=True)
for i in range(n) :
data[i] = data[i] + i + 1
print(max(data) + 1)
각 심는데 걸리는 시간에 i+1을 다시 더해서 총 걸린 시간을 data리스트에 다시 저장.