[백준 문제 복습] 10819번 차이를 최대로(Generators 사용) (파이썬)
[백준 문제 복습] 10819번 차이를 최대로(Generators 사용) (파이썬)
[백준 문제] 10819번 차이를 최대로를 풀어본다.
의식의 흐름
- 이전에 내가 순열 문제를 어렵게 푼 이유는 순열의 모든 경우를 리스트에 넣어야한다고 생각했다.
- 그러나 제너레이터를 알게된 계기가 생겼고, 이것이 리스트에 담는 방식이 아닌 순환에 의해 값을 넣는 다는 것을 알게되었다.
- 그러므로 이번에는 제너레이터로 문제를 풀어보려고 한다.
1. 이론 공부
이터러블(Iterabnles)
- 리스트를 만든 후, 해당 리스트에 있는 객체를 순환하면서 하나씩 꺼내는 과정
lst = [1, 2, 3]
for i in lst :
print(i)
1
2
3
위의 코드에서 lst는 이터러블함
lst = [x * x for x in range(3)]
for i in lst :
print(i)
0
1
4
이것 또한 이터러블함. for문은 다 이터러블하다고 말할 수 있다.
제너레이터(Generators)
- 제너레이터는 이터레이터임
- 하지만 제너레이터는 모든 값을 메모리에 담고 있지 않고 그때그때 값을 생성함
- 때문에 한번에 한개의 값만 순환(iterate) 할 수 있음
mygenerator = (x * x for x in range(3))
for i in mygenerator :
print(i)
0
1
4
제너레이터의 다른점은 한번만 사용될 수 있기때문에, 0을 반환하면 0에 대해서 아예 잊는다.
2. 문제 풀이
from itertools import permutations
n = int(input())
x = sorted(list(map(int, input().split())))
gen = permutations(x)
ans = 0
for x in gen :
sum = 0
for i in range(1, n) :
sum += abs(x[i-1] - x[i])
ans = max(ans, sum)
print(ans)