[BOJ] 11479 통나무 건너뛰기

그리디, 정렬


그리디 문제는 정렬과 세트로 많이 나온다. 이 문제도 그렇다.

그리디임을 파악하긴 쉽지만, 어떻게 정렬을 해야할지 까다로운 문제중 하나이다.

주어진 리스트에서 홀수, 짝수 나누어서 정렬하고 붙인 후, 완전 탐색하며 매 순간 최대값을 저장하며 풀면 된다.

import sys

def solution(n, li):
    if len(li) == 1:
        return -1
    li.sort()
    odd_li = li[0::2]
    even_li = li[1::2]
    even_li.reverse()
    new_li = odd_li + even_li
    _max = abs(new_li[1] - new_li[0])
    for i in range(1, len(new_li)-1):
        tmp = abs(new_li[i+1] - new_li[i])
        if tmp > _max:
            _max = tmp
    return _max

if __name__ == "__main__":
    T = int(sys.stdin.readline().rstrip())
    for _ in range(T):
        N = int(sys.stdin.readline().rstrip())
        L = list(map(int, sys.stdin.readline().rstrip().split()))
        print(solution(N, L))