https://www.acmicpc.net/problem/10819
10819번: 차이를 최대로
첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.
www.acmicpc.net
abs(A[x]-A[x+1])을 최대로!
예제 입력에 힌트로 어떤경우에 62가 나오는지 설명해주면 좋았을텐데...
그래서 찾아왔다
[8, 20, 1, 15, 4, 10]
문제 풀이
기본적인 dfs문제로 문제처럼 풀리도록 입력받은 배열을 모두 탐색한다.
그리고 탐색한 배열의 길이가 N이되면 abs(A[x]-A[x+1])이 최대로 하는지 비교하면 된다.
첫 시도
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int,input().split()))
A = []
ans = 0
def dfs():
if len(A) == N:
sum = 0;
for i in range(N-1):
sum += abs(A[i] - A[i+1])
global ans
ans = max(ans, sum)
return
for i in arr:
if i not in A:
A.append(i)
dfs()
A.pop()
dfs()
print(ans)
6퍼에서 틀렸다.
생각해보니 if i not in A: 부분이 만약 중복되는 수가 있다면 에러가 날법했다.
코드
import sys
input = sys.stdin.readline
N = int(input())
arr = list(map(int,input().split()))
A = []
visited = [False]*N
ans = 0
def dfs():
if len(A) == N:
sum = 0;
for i in range(N-1):
sum += abs(A[i] - A[i+1])
global ans
ans = max(ans, sum)
return
for i in range(N):
if not visited[i]:
visited[i] = True
A.append(arr[i])
dfs()
visited[i] = False
A.pop()
dfs()
print(ans)
180ms
'백준 > 문제풀이_python' 카테고리의 다른 글
1026 보물 _python (0) | 2022.10.24 |
---|---|
11728 배열 합치기 _python (0) | 2022.10.24 |
10974 모든 순열 _python (0) | 2022.10.18 |
1759 암호 만들기 _python (0) | 2022.10.18 |
15666 N과M(12) _python (0) | 2022.10.17 |
댓글