본문 바로가기
알고리즘/SWEA

[swea][파이썬] 1208. [S/W 문제해결 기본] 1일차 - Flatten

by 노베코딩 2022. 8. 22.

리스트에서 가장 큰 값과 가장 작은 값을 찾고 

덤프 수 만큼 for문을 돌리면서 가장 큰값이 나오면 -1하고 break 가장 작은 값이 나오면 +1 break

해준 후에 다시 리스트에서 가장 큰값과 가장 작은 값의 차이를 구하였다.

import sys

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


#리스트에서 가장 큰값
def maxn(lst):
    maxNum = lst[0]
    for tmp in lst:
        if tmp > maxNum:
            maxNum = tmp
    return maxNum

#리스트에서 가장 작은값.
def minn(lst):
    minNum = lst[0]
    for tmp in lst:
        if tmp < minNum:
            minNum = tmp
    return minNum

for test in range(1,11):

    dumpNum = int(input())  #dump 횟수
    lst = list(map(int, input().split()))


    for _ in range(dumpNum):
        #list에서 최소값을 구해주는 함수에 lst를 넣어서
        #최소값 찾음
        minNum = minn(lst)
        #list에서 최대값을 구해주는 함수에 lst를 넣어서
        #최대값 찾음
        maxNum = maxn(lst)

        for idx, ls in enumerate(lst):  ###덤프때 1개뺄것
            if ls == maxNum:  #lst 에서 maxNum과 같은게 나올 때 -1 해줘서 빼줌
                lst[idx] -= 1
                break
        for idx, ls in enumerate(lst):  ###마찬가지로 minNum과 같은게 나올때 +1해서 넣어줌
            if ls == minNum:
                lst[idx] += 1
                break

    #모든 덤프를 완료한후 다시. 리스트에서 최대값과 최소값을 찾아 그 차이를 출력.
    print(f'#{test} {maxn(lst)-minn(lst)}')