[백준 문제 복습] 10819번 차이를 최대로(Generators 사용) (파이썬)


[백준 문제 복습] 10819번 차이를 최대로(Generators 사용) (파이썬)

[백준 문제] 10819번 차이를 최대로를 풀어본다.

의식의 흐름

  1. 이전에 내가 순열 문제를 어렵게 푼 이유는 순열의 모든 경우를 리스트에 넣어야한다고 생각했다.
  2. 그러나 제너레이터를 알게된 계기가 생겼고, 이것이 리스트에 담는 방식이 아닌 순환에 의해 값을 넣는 다는 것을 알게되었다.
  3. 그러므로 이번에는 제너레이터로 문제를 풀어보려고 한다.

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)





© 2018. by statssy

Powered by statssy