Programming/SW Expert Academy

20200818 // 삼성 SW Expert 아카데미 문제 // 3503

껨코 2020. 8. 18. 22:30

삼성 SW Expert 아카데미 3503번 "초보자를 위한 점프대 배치하기" 문제입니다.

TC = int(input())   
ans = []
for tc in range(1, TC + 1):
    k = "#"+str(tc) + " "
    N = int(input())
    lst = list(map(int, input().strip().split()))
    lst.sort(reverse=True)
    mx = max(lst[0]-lst[1], lst[0]-lst[2])
    for i in range(1, N-2):
        mx = max(mx, lst[i] - lst[i+2])
    mx = max(mx, lst[len(lst)-2] - lst[len(lst)-1])
    k += str(mx)
    ans.append(k)
for e in ans:
    print(e)

어떻게 하면 차이의 최댓값을 줄일 수 있을까 고민해보면 가장 높이가 긴 점프대 양 옆에는 2번째, 3번째로 긴 점프대를

 

배치하면 된다. 그 다음은 2번째로 긴 점프대 옆에 4번째로 긴 점프대를 세우고 3번째로 긴 점프대 옆에 5번째로 긴 점프

 

대를 세우면 차이를 최소로 할 수 있다. 따라서 1->2->4->6... , 1->3->5->7... 로 따라가면서 차이를 계산하여 기존의

 

최댓값과 비교하면 최댓값을 갱신해주면 된다. 마지막에 가장 짧은 점프대와 2번째로 짧은 점프대의 차이까지 계산해서

 

최댓값을 갱신하면 원하는 답을 구할 수 있다.