[알고리즘] 소프티어 Lv2. 진정한 효도 (Python)

728x90
반응형

Softeer 알고리즘 문제 풀이

Lv2. 진정한 효도

문제 링크: https://softeer.ai/practice/7374

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

 

 

풀이

한 행에서 최댓값과 최솟값을 저장하고 나서,
전체 땅 높이를 최댓값에 맞출 것인지, 최솟값에 맞출 것인지 경우에 따라 비용을 저장한다.
행마다 계산하는 것이 편해서, 열(세로)마다 계산하는 대신 함수로 만들고 행과 열을 바꿔서 사용했다.

import sys
input = sys.stdin.readline

ground_row = [[int(i) for i in input().split()] for _ in range(3)]

def solution(ground):
    ans = 3		# 땅의 높이는 1이상 3이하이므로 절대 나올 수 없는 차이인 3으로 설정
    for i in range(3):
        max_height = max(ground[i])	# 해당 행에서 최댓값
        min_height = min(ground[i])	# 해당 열에서 최솟값
        min_case = 0
        max_case = 0
        for j in ground[i]:
            min_case += j - min_height	# 가장 작은 값에 맞추는 경우
            max_case += max_height - j	# 가장 큰 값에 맞추는 경우
        ans = min(min_case, max_case, ans)	# 그 중 최솟값
    return ans

# 행열 바꿔서 저장
ground_col = list(map(list, zip(*ground_row)))

# 가로, 세로 버전으로 해보고 최솟값을 result에 저장
result = min(solution(ground_row), solution(ground_col))

print(result)

 

💡 Tip

2차원 배열에서 행과 열을 바꾸고 싶은 경우 map과 zip 함수를 이용해서 가로세로를 바꿀 수 있다.

# 행열 바꿔서 저장
ground_col = list(map(list, zip(*ground_row)))
728x90
반응형