Study/SW Expert

[Python] SW Expert 1208. 1일차 - Flatten

devyoseph 2022. 2. 1. 13:14
  • 시간 : 10개 테스트케이스를 합쳐서 C++의 경우 10초 / Java의 경우 20초 / Python의 경우 30초
  • 메모리 : 힙, 정적 메모리 합쳐서 256MB 이내, 스택 메모리 1MB 이내
 

풀이

가장 높은 높이의 블럭을 빼서 가장 낮은 높이의 블럭에 넣어주는 평탄화 작업입니다. 높이를 인덱스로 표현하면 빠르게 풀 수 있는 문제입니다.

for i in range(10): # 10번의 테스트 케이스
    low = high = 0
    dump = int(input()) # 덤프 수
    height = [0 for i in range(101)] # 높이는 0부터 100까지 = 인덱스화
    lst = list(map(int,input().split()))

    for j in lst:
        height[j] += 1 # 입력 받은 높이들을 height의 인덱스에 기록

    for d in range(dump): # 덤프수만큼 실행

        for k in range(0,101): # 최저 높이 구하기
            if height[k] > 0: 
                low = k
                break

        for l in range(100,-1,-1): # 최고 높이 구하기
            if height[l] > 0:
                high = l
                break

        if low < high: # 모든 높이가 같을 경우 예외가 발생할 수 있으므로 넣는 조건
            height[low] -= 1
            height[low+1] += 1
            height[high] -= 1
            height[high-1] += 1

            if height[low] == 0:
                low += 1
            if height[high] == 0:
                high -= 1
    print(f'#{i+1} {high-low}')