본문 바로가기
알고리즘

백준 차이를 최대로 (Python/Go)

by PudgeKim 2021. 4. 5.

문제 링크: www.acmicpc.net/problem/10819

 

10819번: 차이를 최대로

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

www.acmicpc.net

 

N의 범위가 8이하로 작기 때문에 모든 순열을 구해서 풀면 되는 문제입니다.

아래는 파이썬 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import sys
from itertools import permutations
 
 
def get_num(nums):
    tot = 0
    for i in range(1len(nums)):
        tot += abs(nums[i-1- nums[i])
    return tot
 
 
= int(input())
nums = list(map(int, input().split()))
 
answer = -sys.maxsize
for perm in permutations(nums):
    answer = max(answer, get_num(perm))
 
print(answer)
cs

 

아래는 Go코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package main
 
import (
    "bufio"
    "fmt"
    "os"
    "strconv"
)
 
var n int
var nums []int
var check []int  // 순열 체크용
var answer int = -99999
 
func Dfs(perm []int, lv int) {
    if lv == n {
        tot := GetTotal(perm)
        if answer < tot {
            answer = tot
        }
        return
    }
 
    for i:=0; i<n; i++ {
        if check[i] == 1 {
            continue
        }
        check[i] = 1
        perm = append(perm, nums[i])
        Dfs(perm, lv+1)
        check[i] = 0
        lastIdx := len(perm) - 1
        perm = perm[0:lastIdx]
 
    }
}
 
func GetTotal(nums []intint {
    tot := 0
    for i:=1; i<n; i++ {
        tot += Abs(nums[i-1]-nums[i])
    }
    return tot
}
 
func Abs(num intint {
    if num >= 0 {
        return num
    } else {
        return -num
    }
}
func main() {
    fmt.Scanln(&n)
 
    nums = make([]int, n)
    check = make([]int, n)
 
    scanner := bufio.NewScanner(os.Stdin)
    scanner.Split(bufio.ScanWords)
 
    for i:=0; i<n; i++ {
        scanner.Scan()
        nums[i], _ = strconv.Atoi(scanner.Text())
    }
 
    var emptySlice []int
    Dfs(emptySlice, 0)
    fmt.Println(answer)
}
cs

기본 내장모듈로 permutation이 없는 것 같아 dfs탐색 방식으로 직접 구현하였습니다.

'알고리즘' 카테고리의 다른 글

백준 아기상어 (Go)  (0) 2021.04.07
백준 사다리 조작(Python)  (0) 2021.04.06
백준 게임개발 (Python/Go)  (0) 2021.04.04
백준 최단경로 (Python/Go)  (0) 2021.04.03
백준 피자굽기 (Python/Go)  (1) 2021.04.02