Minimum Loss

Eunseo·2022년 6월 14일
0

HackerRank

목록 보기
14/18
post-thumbnail

Problem Link
https://www.hackerrank.com/challenges/minimum-loss/problem?isFullScreen=true

✅ Problem Summary

구매한 집을 되팔았을 때 날 수 있는 손해 금액 중 최솟값을 구하는 문제

  • postpost: 집 값이 저장되어 있는 리스트(혹은 배열)
  • postpost의 인덱스(index)는 연도를 뜻하며, 해당 인덱스에 저장되어 있는 값은 그 해의 집 값임
  • 집은 1년 이후 부터 팔 수 있으며, 무조건 손해가 나야함

📑 My Answer

  • 모든 테스트 케이스 통과
import os
import sys

def minimumLoss(price):
    idxWprice = [(i, v) for i, v in enumerate(price)]
    idxWprice.sort(key = lambda x:x[1])
    minVal = sys.maxsize
    for i in range(1, len(price)):
        if idxWprice[i][0] < idxWprice[i-1][0]:
            diff = idxWprice[i][1] - idxWprice[i-1][1]
            minVal = min(diff, minVal)
    return minVal

📌 코드 구현 설명

  • (연도, 집값) 정보를 저장한 idxWprice 리스트 생성
  • 집값을 기준으로 idxWprice 정렬
  • 정렬한 idxWprice를 앞에서부터 순차적으로 탐색하며 최소 손해 금액을 계산
    • 인덱스 i번째의 연도가 i-1의 연도보다 작은 경우에만 계산
    • 집값을 기준으로 정렬하였기 때문에, 해당 연도 끼리(i번째의 연도와 i-1의 연도)의 최소 손해 금액을 idxWprice[i][1] - idxWprice[i-1][1] 로 계산할 수 있음
  • 반복문이 한번 수행될 때마다 이전 최솟값과 비교하여 정답을 구함

💼 Takeaway

  • 원인이 무엇인지 모르겠으나(메모리..?), 코딩 테스트 플랫폼에 따라서 처리할 수 있는 값의 최대치가 존재하는 것 같다. 따라서 최솟값을 비교하기 위해 초깃값을 시스템의 최댓값인 sys.maxsize로 설정하였다. (마냥 큰 값으로 설정하면 코드를 잘 짜도 오류가 나는 경우가 있었다.)

profile
내가 공부한 것들

0개의 댓글