알고리즘/백준

백준-11497-통나무 건너뛰기

hong2943 2024. 7. 3. 01:46

구현1

T = int(input())

for _ in range(T):
    N = int(input())
    L = list(map(int,input().split()))

    #정렬
    L.sort()

    level = 0
    for i in range(2,N):
        level = max(level, abs(L[i] - L[i-2]))

    print(level)
  • 이 방식은 대부분의 사람들이 이렇게 풀이했다.
  • L = 2 4 5 7 9 ▶2 5 9 7 4 이렇게 변환된 것에서 인접한 값을 구하는 것은
    • abs(L[2] - L[0]) = abs(2 - 5)
    • abs(L[3] - L[1]) = abs(4 - 7)
    • abs(L[4] - L[2]) = abs(5 - 9) 
  • 이와 같은 방식이기 때문에 새롭게 리스트를 구성하여 인접한 값을 구하는 것과 같게 된다.

구현2  

## 리스트 배치하는 방식
T = int(input())

for _ in range(T):
    N = int(input())
    L = list(map(int,input().split()))

    #정렬
    L.sort()

    #배치
    new_list = L[::2]
    new_list2 = L[1::2][::-1]

    new = new_list + new_list2

    # 인접 크기 계산
    result = new[0] - new[-1]
    for i in range(1,N):
        result = max(result , abs(new[i] - new[i-1]))
    
    print(result)
  • 문제의 해결 방법을 알아내고 이 코드를 가장 먼저 떠올리고 구현했다.
  • 문제 해결 방법 그대로 새로운 리스트를 만들고, 그 리스트에서 인접한 크기를 구해서 가장 큰 값을 추출하는 방식이다.

 

문제 링크

'알고리즘 > 백준' 카테고리의 다른 글

백준-20546-기적의 매매법  (0) 2024.07.12
백준-2839-설탕 배달  (1) 2024.07.03
백준-14502-연구소  (1) 2024.07.01
백준-14248-점프 점프  (0) 2024.06.25
백준-1541-잃어버린 괄호  (0) 2024.06.18