[프로그래머스]150368: 이모티콘 할인 행사 | DFS

2024. 10. 21. 20:06·코딩테스트/프로그래머스

[프로그래머스]150368: 이모티콘 할인 행사- DFS

 

 

 


[python] 문제풀이

1 . DFS 사용하여 할인율 조합 생성

combo는 현재까지 선택된 이모티콘의 할인율 조합.

예를 들어, 첫 번째 이모티콘에 10% 할인을 선택했다면 combo에 [10]이 저장되고, 두 번째 이모티콘에 20% 할인을 선택했다면 combo가 [10, 20]으로 확장

 

2. 할입율 조합에 대한 구매 or 플러스 가입 계산

구매액 > 기준액 인 경우, 플러스 가입 (sub_count) 에 1을 더해줌

아닐 경, 구매액 (sales)에 1을 더해줌

 

2. 최대 가입자, 최대 판매 이익

sub_count > max_sub

 

  • 현재 조합에서 서비스 가입자 수(sub_count)가 이전에 기록된 최대 가입자 수(max_sub)보다 많으면, 현재 조합이 더 나은 결과로 판단하고, max_sub와 max_sale을 업데이트
  • 즉, 더 많은 가입자를 유치한 경우 더 좋은 할인율 조합이므로 이 조합의 결과를 저장

sub_count == max_sub and sales > max_sale

 

  • 만약 현재 조합에서의 가입자 수(sub_count)가 기존 최댓값(max_sub)과 같다면, 이제 **매출(sales)**을 비교
  • 매출이 더 크다면, 동일한 가입자 수에서 더 많은 매출을 올릴 수 있는 조합이므로 매출이 더 큰 조합을 선택

 

def solution(users, emoticons):
    # 가능한 할인율
    disc = [10, 20, 30, 40]
    max_sub = 0
    max_sale = 0

    # 모든 이모티콘에 대해 할인율 조합을 만드는 dfs 함수
    def dfs(depth, combo):
        nonlocal max_sub, max_sale
        
        if depth == len(emoticons):
            sub_count = 0
            sales = 0
            for rate, limit in users:
                total = 0
                for i, price in enumerate(emoticons):
                    if combo[i] >= rate:  # 할인율이 기준에 맞을 때만 구매
                        total += price * (100 - combo[i]) // 100
                if total >= limit:
                    sub_count += 1  # 이모티콘 플러스 서비스 가입
                else:
                    sales += total  # 구매한 금액 추가
            
            # 현재 조합이 가장 나은지 확인
            if sub_count > max_sub or (sub_count == max_sub and sales > max_sale):
                max_sub = sub_count
                max_sale = sales
            return

        # 이모티콘마다 할인율을 선택하여 dfs 호출
        for d in disc:
            dfs(depth + 1, combo + [d])

    # DFS 시작
    dfs(0, [])

    return [max_sub, max_sale]

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] 132265: 롤케이크 자르기 | 집합(set),counter  (1) 2024.11.04
[프로그래머스]67258 : 보석 쇼핑 | 투포인트 탐색  (1) 2024.10.28
[프로그래머스]43165: 타겟 넘버 | DFS  (0) 2024.10.14
[프로그래머스] 1154539 : Lv2 뒤에 있는 큰 수 찾기| 스택  (0) 2024.09.23
[프로그래머스] 12921번 : Lv1 소수 찾기 | 에라토스테네스의 체  (0) 2024.09.15
'코딩테스트/프로그래머스' 카테고리의 다른 글
  • [프로그래머스] 132265: 롤케이크 자르기 | 집합(set),counter
  • [프로그래머스]67258 : 보석 쇼핑 | 투포인트 탐색
  • [프로그래머스]43165: 타겟 넘버 | DFS
  • [프로그래머스] 1154539 : Lv2 뒤에 있는 큰 수 찾기| 스택
#코딩 공부
#코딩 공부
tildacoding 코딩 공부
  • #코딩 공부
    tildacoding
    #코딩 공부
  • 전체
    오늘
    어제
  • 글쓰기 관리자
  • Personal

    • 홈
    • 태그
    • 방명록
  • link

    • GITHUB
    • 분류 전체보기 (51)
      • Dev (12)
        • python (0)
        • 웹크롤링 (2)
        • 머신러닝 (3)
        • 딥러닝 (4)
        • 언어지능 딥러닝 (2)
        • SQL (1)
        • Spring (0)
      • 코딩테스트 (16)
        • 백준 (3)
        • 프로그래머스 (7)
        • 기타 문제 (2)
        • 코딩테스트를 위한 정리 (4)
      • Study (4)
        • 알고리즘 (2)
        • 자료구조 (2)
      • 대외활동 (18)
        • 에이블스쿨 (18)
        • 공모전 (0)
  • 공지사항

    • 루틴 skrrrrr
  • 인기 글

  • 태그

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
#코딩 공부
[프로그래머스]150368: 이모티콘 할인 행사 | DFS
상단으로

티스토리툴바