-
[백준 10819번] 완전 탐색 기법Data Engineering/알고리즘 - Python 2021. 6. 28. 15:29
[백준 10819번 - 차이를 최대로]
https://www.acmicpc.net/problem/10819
10819번: 차이를 최대로
첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.
www.acmicpc.net
(첫번째 시도 - 오답)
생각했던 방법: |가장 큰 수 - 가장 작은 수| + |두번째 큰 수 - 두번째 작은 수| + ... 로 하면 될 것 같았다.
n=int(input()) nums=list(map(int, input().split())) max=sorted(nums, reverse=True) min=sorted(nums) sum=0 for i in range(n//2): sum+=max[i]-min[i] print(sum)
(두번째 시도 - 정답)
*메모리 35172KB, 시간 168ms
생각했던 방법: 모든 순열 조합에서 합을 구하고 그 중에서 가장 큰 값을 선택한다.
from itertools import permutations n=int(input()) arr=list(map(int, input().split())) ans=[] for nums in list(permutations(arr)): sum=0 for i in range(0,n-1): sum+=abs(nums[i]-nums[i+1]) ans.append(sum) print(max(ans))
<공부>
◾ sys.stdin.readline()
: 이 문제에서는 sys를 사용해도 시간이 단축되지 않았다. (필자의 경우 오히려 시간이 더 초과되었음)
➡ sys는 테스트 예제를 여러 줄 받는 경우 사용한다. (위의 문제는 1줄만 받으므로 별다른 차이가 없음)
import sys from itertools import permutations n=int(sys.stdin.readline()) arr=list(map(int, sys.stdin.readline().split()))