이렇게 상자들이 마구잡이로 쌓여 있다.
이때 가장 높은 상자를 낮은 곳으로 옮겨서 평탄화 시켜야 하며, 이때 주어진 작업 횟수(=덤프 횟수)만큼만 옮길 수 있다.
100개의 상자의 높이와 덤프 횟수를 받아 주어진 횟수만큼 덤프를 반복할 때,
그 때의 최고점과 최저점의 차이를 구하는 문제다.
1. 재정렬
T = 10 # 테스트 케이스의 수 T
for test_case in range(1, T+1):
N = int(input()) # 덤프 횟수 N
box = list(map(int, input().split()))
box.sort()
for _ in range(N):
box[-1] -= 1
box[0] += 1
# 재정렬
for i in range(len(box)):
if(box[i] <= box[i+1]):
break
box[i], box[i+1] = box[i+1], box[i]
for i in range(1, len(box)):
if(box[-i] >= box[-(i+1)]):
break
box[-i], box[-(i+1)] = box[-(i+1)], box[-i]
print("#%d %d" %(test_case, box[-1]-box[0])) # 최고점과 최저점의 높이 차 반환
주어진 상자들은 몇번 상자인지 중요한 게 아니라 가장 높이가 큰 상자, 낮은 상자만 중요하다.
그러니 box를 sort하면 0번 인덱스에 가장 작은 상자가, -1번 인덱스에 가장 큰 상자가 들어가게 된다.
그럼 이를 하나씩 옮겨주면 된다.
이때 평탄화를 하면 최고점과 최저점이 달라지기 때문에, 재정렬을 해준다.
정렬된 상자를 발견할 때까지 둘의 위치를 바꿔주면 끝!
2. sort 사용
T = 10 # 테스트 케이스의 수 T
for test_case in range(1, T+1):
N = int(input()) # 덤프 횟수 N
box = list(map(int, input().split()))
box.sort()
for _ in range(N):
box[-1] -= 1
box[0] += 1
# 재정렬
box.sort()
print("#%d %d" %(test_case, box[-1]-box[0])) # 최고점과 최저점의 높이 차 반환
이건 재정렬을 하는데 파이썬 sort 함수를 사용했다.
직접 재정렬을 하는 것보다 파이썬에 내장되어 있는 sort 함수를 사용하는 게 시간이 더 적게 걸렸다.
역시 파이썬 최고!:)
'코딩테스트 > SWEA' 카테고리의 다른 글
| [Python, 파이썬] SWEA 1209. [S/W 문제해결 기본] 2일차 - Sum (0) | 2024.10.15 |
|---|---|
| [Python, 파이썬] SWEA 1926. 간단한 369게임 (1) | 2024.10.15 |
| [Python, 파이썬] SWEA 1954. 달팽이 숫자 (1) | 2024.10.15 |
| [Python, 파이썬] SWEA 1244. [S/W 문제해결 응용] 2일차 - 최대 상금 (0) | 2024.10.15 |
| [Python, 파이썬] SWEA 1204. [S/W 문제해결 기본] 1일차 - 최빈수 구하기 (1) | 2024.10.15 |
