본문 바로가기
카테고리 없음

[백준][파이썬] 10819 차이를 최대로

by titaniumm 2020. 4. 5.

모든 순열를 구한 방법으로 아래코드처럼 구현했더니, 시간초과가 났다. 

다른 풀이들을 보니, itertools를 이용해서 구했던데, 실제 코테에서 itertools를 못쓴다는 말이 있어서 

고민이 많다.

num = int(input())
lit =list(map(int,input().split()))
lit.sort()
def go(lit):
    total =0
    for i in range(0,num-1):
        cnt = lit[i] - lit[i+1]
        if cnt<0:
            cnt = -cnt
        total += cnt
    return total
t =0
ans =0
def per(lit):
    global ans
    n = len(lit)-1
    i = n
    while i>0 and lit[i-1] > lit[i]:
        i -= 1
    if i == 0:
        return 0
    t = go(lit)
    if ans < t:
        ans =t
    j = n
    while lit[i-1] > lit[j] and j>0:
        j -= 1
    lit[i-1],lit[j] =lit[j],lit[i-1]
    j = n
    while i < j:
        lit[i] ,lit[j] = lit[j],lit[i]
        i += 1
        j -= 1
    return lit


while True:
    if per(lit) == 0:
        print(ans)
        break
    if len(lit) ==2:
        continue
    per(per(lit))


댓글