inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

38군데 합격 비법, 2026 코딩테스트 필수 알고리즘

3-9. 3주차 끝 & 숙제 설명

03_12_get_max_discount_price를 pop()으로 구현했어요

해결된 질문

116

박가

작성한 질문수 4

0

1. 현재 학습 진도

 

2. 어려움을 겪는 부분

 

3. 시도해보신 내용

def get_max_discounted_price(prices, coupons):

    if prices:
        prices.sort()

    if coupons:
        coupons.sort()

    discounted_prices = []
    while prices and coupons:
        max_price = prices.pop()
        max_coupon = coupons.pop()
        discounted_prices.append(max_price * (100 - max_coupon) / 100)

    total_sum_prices = sum(discounted_prices) + sum(prices)

    return total_sum_prices


사실상 같은코드긴 한데, 혹시나해서 검증받고싶어서..

python 코딩-테스트 알고리즘 data-structure

답변 2

0

딩코딩코

안녕하세요 박가님! 좋은 질문 감사드립니다!

코드를 직접 작성해보신 점이 정말 대단하고, 이런 시도 자체가 실력을 키우는 데 큰 도움이 됩니다! 👍 스스로 고민하고 작성해본 코드라는 점에서 정말 훌륭한 접근 방식이에요.

다만, pop()을 사용하는 부분을 조금 더 최적화하면 좋을 것 같습니다. pop()은 리스트의 마지막 요소를 제거하면서 반환하는데, 내부적으로 리스트의 크기를 줄이는 연산이 포함되어 있어 반복적으로 사용하면 성능 저하가 발생할 수 있어요.

 

특히, 이미 sort()로 정렬된 리스트라면 pop() 대신 인덱스를 활용하여 순차적으로 접근하는 것이 더 효율적입니다. 따라서 인덱스를 활용한 방식으로 개선해보는 것을 추천드립니다!!

0

JHL

pop(0)라면 비효율적이겠지만, pop()자체는 문제가 없지 않을까요?
인덱스 접근과 그렇게 차이가 나진 않을 것 같습니다.

개인적인 생각이기 때문에 의견이 다르시다면 답변 부탁드립니다!

0

딩코딩코

JHL님이 달아주신 말씀이 정확합니다!

Python 공식 Wiki의 TimeComplexity 문서(https://wiki.python.org/moin/TimeComplexity)에 따르면, pop()처럼 마지막 요소를 제거하면 이동시킬 요소가 없으므로 O(1)이고, pop(0)처럼 첫 번째 요소를 제거하면 나머지 n-1개 요소를 모두 이동시켜야 하므로 O(n)됩니다.

즉, pop() 자체에서 시간 복잡도를 잡아먹지 않으니, 제안해주신 코드가 교재의 코드와 크게 다른 성능을 보이지 않을 것 같습니다!! 다시 질문 주셔서 감사합니다

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 박가님.

주어진 코드는 최대 할인 가격을 계산하는 기능을 수행하고 있습니다. 여러 제품의 가격과 쿠폰을 최대 효과적으로 적용하여 최대 할인된 가격을 계산하려는 의도로 보입니다. 이 코드 내에서 pop() 메서드를 사용하여 리스트의 마지막 항목(최고 가격 또는 최대 할인율)을 선택하는 방식으로 구현되었습니다.

코드 설명 및 검증

  1. 정렬:

    • prices.sort(): 가격이 낮은 순서로 정렬됩니다.
    • coupons.sort(): 할인율이 낮은 순서로 정렬됩니다.
  2. 할인 적용:

    • 반복문을 통해 가격과 쿠폰이 모두 남아있는 동안, pop()을 사용하여 가장 높은 가격과 할인율을 선택하여 상품 가격에 적용합니다.
  3. 할인된 가격 계산:

    • discounted_prices.append(max_price * (100 - max_coupon) / 100): 할인된 가격을 리스트에 추가합니다.
  4. 총합 계산:

    • 아직 할인되지 않은 가격(남은 가격)과 할인된 가격의 합을 계산하여 반환합니다.

이 코드는 올바르게 작성되어, 각 순서에서 논리적 오류 없이 동작합니다. pop()을 사용하여 리스트의 마지막 요소를 꺼내는 것은 코드의 목적과 조건을 잘 충족시키는 방법입니다. 즉, 미리 정렬된 리스트를 사용하여 가장 큰 요소들을 순차적으로 선택하는 것입니다.

더 최적화나 효율성을 높이는 방법은 다양한 방식으로 생각할 수 있지만, 현재 코드는 문제 해결을 위한 기본적인 논리를 잘 구현하고 있습니다.

관련된 다른 질문이나 방법을 참고하시려면 아래 링크를 확인해보세요:
- 백준 2493 문제 시간 초과 해결 방법

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

코딩테스트 처음인데 이런 공부방법이어도 괜찮을까요

0

53

2

3-3 정렬-2 선택정렬 로직

0

36

2

링크드 리스트 끝에서 k번째 값 출력하기

0

40

2

LinkedList 과제 Fast, slow 포인터

0

48

2

투포인터 시간복잡도

0

49

2

수강평 작성 후 자료

0

49

2

수업교재 링크 오류

2

105

2

프로그래머스에서 제출 후 채점시 틀림ㅠ

0

124

2

1-10 알고리즘 더 풀어보기(2) 질문 있습니다

0

68

2

문제 풀이 방식 관련 질문입니다!

0

80

2

1-5 알고리즘과 친해지기 (2) - 최빈값찾기 질문 있습니다

0

84

2

수업자료 pdf 받고싶습니다

0

102

2

강의 자료 오류 수정

0

69

1

2-10 더하거나 빼거나 관련 질문입니다

0

60

2

3-8 해쉬 -2

0

47

2

Linked List Element Delete Explanation Problem

0

63

2

강의3-4 스택 탑 문제

0

73

2

코드스니펫 입출력 케이스에 오류가 있는것 같아요

0

97

3

링크드 리스트 원소 찾기 구현 방식 질문드립니다.

0

73

2

1874 - 스택 문항

0

79

2

DP Java 예제 자료형 오버플로우 문제

0

96

2

4-9 4주차 숙제중 농심라면 문제

0

105

2

DFS 에서 스택을 사용하는 이유

1

181

3

들여쓰기가 햇갈리네요

0

118

2