[백준] 114997번 통나무 건너뛰기

거북이·2023년 2월 2일
0

백준[실버1]

목록 보기
22/67
post-thumbnail

💡문제접근

  • 단순히 정렬을 하는 문제가 아니었다.
  • 가장 높은 통나무를 중앙에 배치하고 그 다음부터 양 옆으로 통나무를 배치하는 방식으로 수행해간다.
  • 인접한 통나무 간의 높이를 비교해서 난이도를 찾고 가장 마지막으로 맨 앞에 있는 통나무와 맨 뒤에 있는 통나무 간의 높이를 비교해서 난이도를 계산한 다음 구하고자 하는 최소 난이도를 계산한다.
  • 연결리스트의 개념을 이용했다.

💡코드(메모리 : 34128KB, 시간 : 268ms)

from collections import deque
import sys
input = sys.stdin.readline

T = int(input().strip())
for i in range(T):
    N = int(input().strip())
    level = -100000000
    arr_left = deque()
    arr_right = []
    arr = sorted(list(map(int, input().strip().split())))
    arr_max = arr.pop()
    for i in range(1, len(arr)+1):
        temp = arr.pop()
        if i % 2 != 0:
            arr_right.append(temp)
        else:
            arr_left.appendleft(temp)
    arr_left.append(arr_max)
    arr_left.extend(arr_right)
    for i in range(len(arr_left) - 1):
        if abs(arr_left[i] - arr_left[i+1]) > level:
            level = abs(arr_left[i] - arr_left[i+1])
    if level < abs(arr_left[0] - arr_left[-1]):
        level = abs(arr_left[0] - arr_left[1])
    print(level)

💡소요시간 : 17m

0개의 댓글