n = int(input()) testset = list(map(int, input().split())) rearrlist = [[] for i in range(n)] # 원소 1개의 rearrlist 생성 for i in range(n) : rearrlist[0].append([testset[i]]) # 원소 x개의 rearrlist를 참고하여 원소 x+1개의 rearrlist를 작성 # 원소 n개가 될때까지 for x in range (0, n-1) : for list in rearrlist[x] : remainder = testset[:] for e in list : remainder.remove(e) for element in testset : if element in remainder : rearrlist[x+1].append(list + [element]) max = 0 for list in rearrlist[n-1] : abssum = 0 for i in range(len(list) - 1) : abssum = abssum + abs(list[i]-list[i+1]) if abssum > max : max = abssum print(max) |
n개의 정수를 재정렬하는 n!가지의 경우의 수를 전부 리스트에 담았고, 하나하나 sum(abs)를 구하면서 max를 찾았다.
n!가지 재정렬을 리턴하는 함수는 뭔가 그럴듯한걸 import하면 남이 구현한걸 쓸수있을것같기도 한데 찾아도 바로 안나와서 패스했다.
생각없이 모든 경우를 다 따지는 방법이 코드 짜기도 쉽고 논리적으로 허점이 생길 일도 없어서 마음이 놓인다.
그리고 뭔가 초과가 뜨면 그제서야 다른 방법을 찾는 상황의 반복
'Week 01 ~ 04 : 알고리즘 문제 풀이' 카테고리의 다른 글
파이썬 백준 2468 안전 영역 (0) | 2021.11.09 |
---|---|
파이썬 백준 10971 외판원 순회 2 (0) | 2021.11.09 |
파이썬 백준 1074 Z (0) | 2021.11.09 |
파이썬 백준 9663 N-Queen (0) | 2021.11.09 |
파이썬 백준 1914 하노이 탑 (0) | 2021.11.09 |