소스 코드
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. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.
'코딩 문제해결 > 문제 풀이.SWEA' 카테고리의 다른 글
[SWEA 코딩] 쇠막대기 자르기 - PYTHON #5432 (0) | 2021.06.28 |
---|---|
[SWEA 코딩] 빠른 휴대전화 키패드 - PYTHON #4261 (0) | 2021.06.26 |
[SWEA 코딩] 정사각형 방 - PYTHON #1861 (0) | 2021.06.22 |
[SWEA 코딩] [SW 모의역량 테스트] 무선 충전 - PYTHON #5644 (0) | 2021.06.21 |
[SWEA 코딩] [SW 모의역량 테스트] 탈주범 검거 - PYTHON #1953 (0) | 2021.06.20 |