작심 365
[백준 14247번] 나무 자르기 - (java,python) 본문
문제 : https://www.acmicpc.net/problem/14247
📌 문제 탐색하기
가장 성장률이 높은 나무를 가장 마지막에 잘라야 나무의 길이를 가장 많이 얻어 갈 수 있다.
따라서 가장 성장률이 낮은 나무부터 먼저 자르면 된다.
📌 코드 설계하기
성장률을 기준으로 정렬을 한 뒤, 매일 하나씩 잘라주면 된다.
생각해보니 모든 나무를 자르기 때문에 나무 초기 길이는 따로 저장할 필요가 없어서 바로 answer 변수에 더해주었다.
성장률의 경우 배열에 저장을 한 뒤에 오름차순 정렬을 하고 날짜마다 곱해준 값을 answer에 더해주면 된다.
📌 코드
Java
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//int[] trees = new int[n];
int[] growth = new int[n];
int answer = 0;
for (int i = 0; i < n; i++) {
answer += sc.nextInt();
}
for (int i = 0; i < n; i++) {
growth[i] = sc.nextInt();
}
Arrays.sort(growth);
for (int i = 0; i < n; i++) {
answer += growth[i] * i;
}
System.out.println(answer);
}
}
Python
import sys
input = sys.stdin.readline
n = int(input())
H = list(map(int,input().split()))
A = list(map(int,input().split()))
ans = 0
# 초기 나무 크기 전체
ans += sum(H)
A.sort() # 오름차순 정렬
for i in range(n):
ans+= A[i]*i
print(ans)
'코테 > 백준' 카테고리의 다른 글
[백준 2012번] 등수 매기기 - (java) (1) | 2024.12.18 |
---|---|
[백준 18230번] 2xN 예쁜 타일링 - (java) (1) | 2024.12.08 |
[백준 2529번] 부등호 - (java) (1) | 2024.12.05 |
[백준 6603번] 로또 - (java) (2) | 2024.09.29 |
[백준 2206번] 벽 부수고 이동하기 - (python,java) (3) | 2024.09.24 |
Comments