Algorithm/SW Expert Academy

[Python] 1208. Flatten

느낌표 공장장 2021. 8. 11. 02:32
import sys
sys.stdin = open('input.txt')

# min max index 함수 쓴 버전
# 10개의 테스트 케이스
for idx in range(1, 11):
    # 덤프 횟수
    n = int(input())
    # 각 상자의 높이 값
    boxes_height = list(map(int, input().split()))

    # 평탄화 작업
    for i in range(n):
        # 가장 높은 상자, 가장 낮은 상자 찾기
        h_idx = boxes_height.index(max(boxes_height))
        l_idx = boxes_height.index(min(boxes_height))

        # 박스 옮기기
        boxes_height[h_idx] -= 1
        boxes_height[l_idx] += 1

    # final 가장 높은 상자, 가장 낮은 상자 찾기
    highest = max(boxes_height)
    lowest = min(boxes_height)


    print('#{} {}'.format(idx, highest-lowest))

 

* min, max 함수 안쓴 코드

import sys
sys.stdin = open('input.txt')


# min max 함수 안쓴 버전
# 가장 높은 상자, 가장 낮은 상자 찾아주는 함수
def find_min_max(boxes_height):
    # 가장 높거나 가장 낮은 박스 길이와 해당 인덱스 초기화
    highest = lowest = boxes_height[0]
    h_idx = l_idx = 0
    # 박스 전체를 돌면서 비교
    for h in range(len(boxes_height)):
        # 가장 높은 상자 찾기
        if boxes_height[h] > highest:
            highest = boxes_height[h]
            h_idx = h
        # 가장 낮은 상자 찾기
        if boxes_height[h] < lowest:
            lowest = boxes_height[h]
            l_idx = h

    # 가장 높은 상자, 낮은 상자 인덱스 반환
    return h_idx, l_idx


# 10개의 테스트 케이스
for idx in range(1, 11):
    # 덤프 횟수
    n = int(input())
    # 각 상자의 높이 값
    boxes_height = list(map(int, input().split()))

    # 평탄화 작업
    for i in range(n):
        # 가장 높은 상자, 가장 낮은 상자 찾기
        h_idx, l_idx = find_min_max(boxes_height)

        # 박스 옮기기
        boxes_height[h_idx] -= 1
        boxes_height[l_idx] += 1

    # final 가장 높은 상자, 가장 낮은 상자 찾기
    f_h_idx, f_l_idx = find_min_max(boxes_height)


    print('#{} {}'.format(idx, boxes_height[f_h_idx] - boxes_height[f_l_idx]))
# min max 함수 안쓴 버전
# 가장 높은 상자, 가장 낮은 상자 찾아주는 함수
def find_min_max(boxes_height):
    # 가장 높거나 가장 낮은 [박스 길이, 해당 인덱스] 초기화
    highest = [boxes_height[0], 0]
    lowest = [boxes_height[0], 0]
    # 박스 전체를 돌면서 비교
    for h in range(len(boxes_height)):
        # 가장 높은 상자 찾기
        if boxes_height[h] > highest[0]:
            highest[0] = boxes_height[h]
            highest[1] = h
        # 가장 낮은 상자 찾기
        if boxes_height[h] < lowest[0]:
            lowest[0] = boxes_height[h]
            lowest[1] = h

    # 가장 높은 상자, 낮은 상자 인덱스 반환
    return highest, lowest


# 10개의 테스트 케이스
for idx in range(1, 11):
    # 덤프 횟수
    n = int(input())
    # 각 상자의 높이 값
    boxes_height = list(map(int, input().split()))

    # 평탄화 작업
    for i in range(n):
        # 가장 높은 상자, 가장 낮은 상자 찾기
        h_box, l_box = find_min_max(boxes_height)

        # 박스 옮기기
        boxes_height[h_box[1]] -= 1
        boxes_height[l_box[1]] += 1

    # final 가장 높은 상자, 가장 낮은 상자 찾기
    f_h_box, f_l_box = find_min_max(boxes_height)


    print('#{} {}'.format(idx, f_h_box[0] - f_l_box[0]))

'Algorithm > SW Expert Academy' 카테고리의 다른 글

[Python] 1954. 달팽이 숫자  (0) 2021.08.11
[Python] 1209. sum  (0) 2021.08.11
[Python] 4831. 전기버스  (0) 2021.08.10
[Python] 4835. 구간합  (0) 2021.08.10
[Python] 4834. 숫자 카드  (0) 2021.08.10