[Python] BOJ 16193번. 차이를 최대로 2

16193번. 차이를 최대로 2

문제 링크

풀이 코드

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
71
72
73
74
# 16193번. 차이를 최대로 2


# 코드가 너무 더럽지만 로직만 파악하자...

n = int(input())
nList = list(map(int, input().split()))
nList.sort(reverse=True)
ans = 0
ansList = []
'''
맨 앞에는 중간수가 들어가야하고
그 다음부터
큰작큰작... vs 작큰작큰... 중 최대값을 구해준다.
'''


def initList(k):
    global ansList
    ansList = []
    ansList.append(k)


def func1():
    f = 0  # 앞
    b = n - 1  # 뒤
    for i in range(n - 1):
        if i % 2 == 0:
            # 작은 수 넣기 (뒤)
            ansList.append(nList[b])
            b -= 1
        else:
            # 큰 수 넣기 (앞)
            ansList.append(nList[f])
            f += 1
    getAns(ansList)


def func2():
    f = 0  # 앞
    b = n - 1  # 뒤
    for i in range(n - 1):
        if i % 2 == 1:
            # 작은 수 넣기 (뒤)
            ansList.append(nList[b])
            b -= 1
        else:
            # 큰 수 넣기 (앞)
            ansList.append(nList[f])
            f += 1
    getAns(ansList)


def getAns(ansList):
    global ans
    cnt = 0
    for i in range(n-1):
        cnt += abs(ansList[i] - ansList[i + 1])
    ans = max(ans, cnt)


if n % 2 == 0:
    initList(nList[n // 2 - 1])
    func1()  # 큰작큰작
    initList(nList[n // 2 - 1])
    func2()  # 작큰작큰
else:
    initList(nList[n // 2])
    func1()
    initList(nList[n // 2])
    func2()


print(ans)

비고