D3
Problem
Solution
1. 최댓값과 최솟값의 차이를 최소로 만드는 것을 목표로 하고 시작한다.
2. 최댓값과 최솟값이 같아지면 더 이상 옮길 필요가 없다.
3. 최댓값에서 최솟값으로 하나씩 옮기면 언젠가 원하는 곳에 도달한다.
Code
# 최댓값과 최솟값 찾기
def max_height(arr):
max_h = min_h = arr[0]
for i in range(len(arr)):
if arr[max_h] < arr[i]:
max_h = i
if arr[min_h] > arr[i]:
min_h = i
return [max_h, min_h]
for test_case in range(1, 11):
dump = int(input())
box_list = list(map(int, input().split()))
dump_cnt = 0
while True:
# 만약 차이가 1보다 크면 최소에서 최대로 한 칸 옮기기
if box_list[max_height(box_list)[0]] - box_list[max_height(box_list)[1]] > 1:
box_list[max_height(box_list)[0]] -= 1
box_list[max_height(box_list)[1]] += 1
# 카운트
dump_cnt += 1
# 카운트가 주어진 횟수가 되면 멈춤
if dump_cnt == dump:
break
else: # 같아지면 멈춤
break
print(f'#{test_case} {box_list[max_height(box_list)[0]] - box_list[max_height(box_list)[1]]}')
★ 개선사항
최선의 수가 1칸차이라면, 주어진 횟수를 마칠 때까지 같은 작업을 반복한다. 그럼 필요없는 작업을 반복하기에
비효율적이다.
이를 효율적으로 바꿀 순 없을까?
<부족한 부분은 댓글로 남겨주시면 저에게 힘이됩니다!>
<그림 출처: SWEA Flatten>
반응형
'Algorithm > SW Expert Academy Review' 카테고리의 다른 글
16268. 풍선팡2 (2) | 2023.03.05 |
---|---|
9490. 풍선팡 (2) | 2023.03.05 |
4831. [파이썬 S/W 문제해결 기본] 1일차 - 전기버스 (0) | 2023.03.05 |
16180. 4834. [파이썬 S/W 문제해결 기본] 1일차 - 숫자 카드 (0) | 2023.03.05 |
1206. [S/W 문제해결 기본] 1일차 - View (0) | 2023.03.05 |