창고에 상자가 가로방향으로 일렬로 쌓여 있음
가로의 길이가 7이고,
1열은 높이가 6으로 6개의 상자가 쌓여있고,
2열은 3개의 상자, 3열은 9개의 상자가 쌓여있으며 높이는 9.
창고 높이 조정이란 가장 높은 곳에 상자를 가장 낮은 곳으로 이동하는 것
가장 높은 곳이나 가장 낮은 곳이 여러곳이면 아무거나 선택해도 됨
위 그림을 1회 높이 조정한 결과는 다음과 같음:
입력으로 창고의 가로길이가 주어지고,
각 열의 상자 높이가 주어짐
그 다음엔 높이 조정횟수인 M이 주어짐
M회 높이 조정을 한 후 가장 높은 곳과 가장 낮은 곳의 차이를 출력하는 프로그램 작성
입력예시)
10
69 42 68 76 40 87 14 65 76 81
50
출력예시)
20
내가 쓴 코드
import sys
sys.stdin = open("input.txt", 'rt')
L = int(input())
boxes = list(map(int, input().split()))
M = int(input())
for i in range(M):
max_idx = boxes.index(max(boxes))
boxes[max_idx] -= 1
min_idx = boxes.index(min(boxes))
boxes[min_idx] += 1
print(max(boxes) - min(boxes))
모범답안
#모범답안
import sys
sys.stdin = open("input.txt", 'rt')
L = int(input())
a = list(map(int, input().split()))
m = int(input())
a.sort()
for _ in range(m):
a[0] += 1
a[L-1] -= 1
a.sort()
print(a[L-1] - a[0])
느낀점
1. 아니 너무 쉬운데 이거 맞나.. 쉬어가는 문제 일리는 없고 내장함수 저렇게 쓰면 안되는건가.. 아 몰라 어쨋든 백점이니 잘했다!
2. 그래 지금 그리디를 하고있으니까.. "정렬" 후 "최적의 선택"!!! 이걸 생각했어야제!!!
정렬하면 최소 최댓값을 바로 인덱스로 찾을 수 있으니까 .index함수를 쓸 필요가 없었구나! 그래도 잘해따 ~
다시 풀어보기
import sys
L = int(input())
boxes = list(map(int, input().split()))
M = int(input())
boxes.sort()
for _ in range(M):
boxes[-1] -= 1
boxes[0] += 1
boxes.sort()
print(boxes[-1] - boxes[0])