본문 바로가기

Algorithm/BOJ

[BOJ] 10819. 차이를 최대로

https://www.acmicpc.net/problem/10819

 

10819번: 차이를 최대로

첫째 줄에 N (3 ≤ N ≤ 8)이 주어진다. 둘째 줄에는 배열 A에 들어있는 정수가 주어진다. 배열에 들어있는 정수는 -100보다 크거나 같고, 100보다 작거나 같다.

www.acmicpc.net

 

 

1. 해결방법

"""
1. 아이디어
- 배열안 2개의 원소 값 차이의 합 중 최대 값을 구하는 문제.
- 하나의 원소를 먼저 선택하고, n-1개 중 추가적으로 계속 뽑는 형식.
- n-1, n-2 ... 재귀적으로 들어가면서 차이 값을 구한다.

2. 시간복잡도
- O(2^n)

3. 자료구조
- 백트래킹 : 재귀
"""

 

 

2. 정답코드

입력 예제(1)

6
20 1 15 8 4 10

출력 예제(1)

62

 

코드

import sys
input = sys.stdin.readline


N = int(input())
A = list(map(int, input().split()))
chk = [False for _ in range(N)]
answer = []
max_v = 0


# recur
def recur(depth):
    global max_v

    # 재귀 종료 지점
    if depth == N:
        temp = 0
        for j in range(N - 1):
            temp += abs(answer[j] - answer[j + 1])
        max_v = max(max_v, temp)
        return

    # 재귀
    for i in range(N):
        if chk[i] == False:
            answer.append(A[i])
            chk[i] = True
            recur(depth + 1)
            chk[i] = False
            answer.pop()



# main
recur(0)
print(max_v)

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 1966. 프린터 큐  (0) 2022.07.11
[BOJ] 14503. 로봇 청소기  (0) 2022.06.28
[BOJ] 7576. 토마토  (0) 2022.06.24
[BOJ] 1759. 암호 만들기  (0) 2022.06.23
[BOJ] 9663. N-Queen  (0) 2022.06.22