소스 코드

T = int(input())

for tc in range(1,1+T):

    # 점프대의 수
    n = int(input())

    # 점프대의 높이
    h = list(map(int,input().split()))

    # 정렬
    h.sort(reverse=True)

    # 왼쪽 오른쪽 끝 값의 초기값
    l = h[0]
    r = h[0]

    idx = 1

    # 높이의 최대 차이
    h_max = 0

    while True:
        if h_max < abs(l - h[idx*2-1]):
            h_max = abs(l - h[idx*2-1])

        if h_max < abs(r - h[idx*2]):
            h_max = abs(r - h[idx*2])

        # 왼쪽 오른쪽 끝 값 갱신
        l = h[idx*2-1]
        r = h[idx*2]

        idx += 1

        # n이 홀수 일때
        if n % 2 == 1:
            if idx*2-1 == n:
                
                # 마지막 값들끼리 비교
                if h_max < abs(l - r):
                    h_max = abs(l - r)
                break

        # n이 짝수 일때
        else:
            if idx*2 == n:
                
                # n이 6일때, 1,2 / 3,4를 확인하면 5가 남으므로
                # (6은 idx범위 벗어나므로)
                # 마지막 남은 값(5)을 따로 확인
                if h_max < abs(l - h[idx*2-1]):
                    h_max = abs(l - h[idx * 2 - 1])
                l = h[idx*2-1]
                if h_max < abs(l - r):
                    h_max = abs(l - r)
                break

    print('#{} {}'.format(tc,h_max))

 


해결 방법

1. 높이들을 정렬

 

2. 가장 큰 값을 기준으로 두고, 왼쪽 오른쪽에 값들을 집어 넣음

ex) [5, 4, 3, 2, 1]가 있을 경우, _ _ 5 _ _ => _ 4 5 3 _ => 2 4 5 3 1 이런 느낌으로 완성시키는 작업


느낀 점

 

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.