[알고리즘]창고정리

김도연·2024년 1월 13일

알고리즘

목록 보기
26/56

문제

창고에 상자가 가로방향으로 일렬로 쌓여 있습니다. 만약 가로의 길이가 7이라면

1열은 높이가 6으로 6개의 상자가 쌓여 있고, 2열은 3개의 상자, 3열은 9개의 상자가 쌓여 있 으며 높이는 9라고 읽는다.
창고 높이 조정은 가장 높은 곳에 상자를 가장 낮은 곳으로 이동하는 것을 말한다.
가장 높은 곳이나 가장 낮은 곳이 여러곳이면 그 중 아무거나 선택하면 된다.
위에 그림을 1회 높이 조정을 하면 다음과 같아진다.

창고의 가로 길이와 각 열의 상자 높이가 주어집니다. m회의 높이 조정을 한 후 가장 높은 곳 과 가장 낮은 곳의 차이를 출력하는 프로그램을 작성하세요.

▣ 입력설명
첫 번째 줄에 창고 가로의 길이인 자연수 L(1<=L<=100)이 주어집니다.
두 번째 줄에 L개의 자연수가 공백을 사이에 두고 입력됩니다. 각 자연수는 100을 넘지 않습니다
세 번째 줄에 높이 조정 횟수인 M(1<=M<=1,000)이 주어집니다.

▣ 출력설명
M회의 높이 조정을 마친 후 가장 높은곳과 가장 낮은 곳의 차이를 출력하세요.

입력예제1

10
69 42 68 76 40 87 14 65 76 81
50

출력예제1

20

[내 코드]

N=int(input())
box=list(map(int,input().split()))
set_time=int(input())

for i in range(set_time):
    box.sort()
    box[0]+=1
    box[N-1]-=1
box.sort()
res=box[N-1]-box[0]
print(res)
  1. 입력을 배열형태로 받는다.
  2. 받은 배열을 우선 오름차순으로 정렬하고 박스가 제일 많은 곳에서 적은 곳으로 하나씩 옮기는 것이므로 정렬된 box리스트의 index값이 0인 박스의 개수를 하나 증가시키고 index값이 제일 마지막 값인 N-1의 박스의 개수를 하나 감소시킨다.
  3. for문이 종료된 후 상자리스트를 정렬한후 가장 큰값이 index가 N-1인 요소에서 가장 작은값인 index가 0인 요소를 빼서 출력.

[해설코드]

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])

0개의 댓글