Final Prices With a Special Discount in a Shop

제로콜라좋아요·2024년 6월 24일
0

algorithem

목록 보기
34/37

문제설명

정수 배열 prices가 주어집니다. 여기서 prices[i]는 상점에서 i번째 항목의 가격입니다.

상점에서 항목에 대한 특별 할인이 있습니다. 만약 i번째 항목을 구매하면, j번째 항목의 가격만큼 할인을 받게 됩니다. 여기서 j는 i보다 큰 최소 인덱스이며 prices[j] <= prices[i]를 만족합니다. 그렇지 않으면 할인을 받지 못합니다.

결과적으로 answer[i]는 특별 할인을 고려한 후 i번째 항목의 최종 가격이 됩니다.

예제 1:

•	입력: prices = [8,4,6,2,3]
•	출력: [4,2,4,2,3]
•	설명:
•	항목 0: 가격 8, 할인 4, 최종 가격 4 (8 - 4 = 4)
•	항목 1: 가격 4, 할인 2, 최종 가격 2 (4 - 2 = 2)
•	항목 2: 가격 6, 할인 2, 최종 가격 4 (6 - 2 = 4)
•	항목 3: 가격 2, 할인 없음, 최종 가격 2
•	항목 4: 가격 3, 할인 없음, 최종 가격 3

예제 2:

•	입력: prices = [1,2,3,4,5]
•	출력: [1,2,3,4,5]
•	설명: 모든 항목에 대해 할인이 없습니다.

예제 3:

•	입력: prices = [10,1,1,6]
•	출력: [9,0,1,6]

제약조건

•	1 <= prices.length <= 500
•	1 <= prices[i] <= 1000

문제풀이

class Solution:
    def finalPrices(self, prices: List[int]) -> List[int]:
        n = len(prices)
        answer = prices[:]  # 원본 배열을 복사하여 초기화
        
        for i in range(n):
            for j in range(i + 1, n):
                if prices[j] <= prices[i]:
                    answer[i] = prices[i] - prices[j]
                    break
        
        return answer

<내 코드의 흐름>

  1. finalPrices라는 메서드를 정의합니다.
  • 이 메서드는 prices라는 정수 리스트를 인자로 받아 최종 가격이 들어있는 정수 리스트를 반환합니다.
  1. prices 리스트의 길이를 n 변수에 저장합니다.
  2. prices 리스트의 복사본을 만들어 answer 리스트에 저장합니다.
  • 이는 원본 배열을 수정하지 않기 위해 사용합니다.
  1. 0부터 n-1까지의 값을 갖는 i에 대해 반복합니다.
  • 이는 prices 리스트의 각 항목에 대해 처리하기 위함입니다.
  1. i보다 1 큰 값부터 n-1까지의 값을 갖는 j에 대해 반복합니다.
  • 이는 i보다 뒤에 있는 항목들을 탐색하기 위함입니다.
  1. j번째 항목의 가격이 i번째 항목의 가격보다 작거나 같은지 확인합니다.
  2. 조건이 참이라면, i번째 항목의 최종 가격을 계산하여 answer 리스트에 저장합니다.
  3. 첫 번째로 조건을 만족하는 j를 찾으면, 더 이상 반복할 필요가 없으므로 내부 for 루프를 종료합니다.
  4. 모든 항목에 대해 최종 가격을 계산한 후, answer 리스트를 반환합니다.
profile
개발자계의 제로콜라

0개의 댓글