본문 바로가기

백준 write-up/정렬 & 그리디

[백준] 통나무 건너뛰기 : 11497번 - Python

728x90
반응형

https://www.acmicpc.net/problem/11497

 

11497번: 통나무 건너뛰기

남규는 통나무를 세워 놓고 건너뛰기를 좋아한다. 그래서 N개의 통나무를 원형으로 세워 놓고 뛰어놀려고 한다. 남규는 원형으로 인접한 옆 통나무로 건너뛰는데, 이때 각 인접한 통나무의 높이

www.acmicpc.net

 

 

 

문제의 접근 방법

 

통나무의 높이를 크기 순서대로 정렬한 후, 가장 큰 통나무를 기준으로 양옆을 그 다음으로 큰 통나무로 채우는 형식으로 만들기 -> 가장 작은 높이차

 

* 가장 첫 통나무와 가장 마지막 통나무가 인접해있지 않다면 그냥 정렬만 해주어도 인접한 원소의 차이들을 최소로 만들어주지만 문제에서 가장 첫 통나무와 마지막 통나무가 인접해있다고 명시되어 있기 때문에 위처럼 정렬할 경우에는 첫 원소와 마지막 원소의 차이로 인해 최대 난이도를 가지는 배열이 된다.

 

 

 

내가 막혔던 부분

 

풀이 방법을 코드로 나타내기 -> 인덱스가 2씩 차이나도록 원소들을 비교하여 최소 난이도 구하기

 

 

 

문제 풀이 방법

 

테스트 케이스 T개 입력받기 -> T번만큼 반복문을 돌려서 통나무의 개수와 높이들을 입력받기 -> 통나무들의 높이를 입력받은 리스트 L을 정렬하기 -> 최소 난이도를 구하기 위해 변수 level 선언 후 n-2번만큼 반복문 돌리기 (이 때, 인덱스 값이 2씩 차이나도록 하여 두 원소들을 비교하기 때문에 전체 원소의 개수에서 2를 뺀 만큼만 비교하기 때문에 n-2번으로 범위 설정) -> 두 개의 원소를 비교하여 차이가 가장 큰 것을 max 함수로 뽑아내서 level에 저장 후 출력.

 

 

 

 

소스코드

T = int(input())

for i in range(T):
    n = int(input())
    L = list(map(int, input().split()))
    L.sort()
    level = 0
    
    for j in range(n-2):
        level = max(level, abs(L[j]-L[j+2]))
        
    print(level)
728x90
반응형