[프로그래머스] 매출 하락 최소화 (DP, 트리)

2023. 9. 6. 22:26·Coding Test/programmers
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/72416

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

분석

워크숍에 참석할 직원들을 선발
모든 팀은 최소 1명 이상의 직원을 워크숍에 참석
워크숍에 참석하는 직원들의 하루평균 매출액의 합이 최소
10번 직원은 C팀과 D팀 모두에 속해 있으므로, 두 팀에서 모두 참석한 것으로 인정
참석하는 직원들의 하루평균 매출액의 합을 최소로 하려고 합니다. 그렇게 최소화된 매출액의 합 리턴

 

  • d[i][j] : i는 노드번호, j는 워크샵 참여/불참 하는 경우
    • 현재 노드가 불참한다면 자식노드 중 하나가 참여해야함
      • 전체 자식 노드 중 (참석 가중치 - 불참 가중치) 가장 작은 노드를 선정
    • 현재 노드가 참여한다면 각 자식노드들 참여/불참 작은 값들만을 더하기

 

2023.08.27 - [programmers/연습문제] - 등대 (트리, DP)

 

등대 (트리, DP)

https://school.programmers.co.kr/learn/courses/30/lessons/133500 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞

karla.tistory.com

더보기

https://blog.encrypted.gg/997

 

[2021 KAKAO Blind Recruitment] Q7. 매출 하락 최소화 (C++, Python, Java)

문제 링크 https://programmers.co.kr/learn/courses/30/lessons/72416 예상 난이도 G2 알고리즘 분류 트리 DP 풀이 Tree DP를 몰랐으면 절대 풀 수 없습니다. 다만 Tree DP를 알았으면 구현은 쉬운편이었습니다. 테이

blog.encrypted.gg

 

 

풀이

INF = float('inf')
def solution(sales, links):
    
    s=[0]+sales
    n=len(s)

    d = [[0]*2 for i in range(n)] # d[node][0] 참석,  d[node][1] 불참

    def dfs(x):
        if not g[x]:
            d[x][0],d[x][1] = s[x],0
            return

        mingap = INF # 모든 팀이 워크샵에 참석해야 하는 조건을 만족시키기 위해 필요한 값
        d[x][0] = s[x] # x 참석 == x 매출 빠짐
         
        for i in g[x]:
            dfs(i)
            d[x][0] += min(d[i])
            mingap = min(mingap, d[i][0]-d[i][1])
            # (참석 가중치 - 불참 가중치) 가장 작은 노드를 선택
            
        if mingap < 0: 
            mingap = 0
        d[x][1] = d[x][0]+mingap-s[x] 
        # x 불참 =  각 자식노드들 참여/불참 경우 최소 가중치 중 작은 값들만을 더하기

    
    g = [[] for i in range(n)]
    for x in links:
        g[x[0]].append(x[1])
        
    dfs(1)
    return min(d[1])

 

 

 

728x90
'Coding Test/programmers' 카테고리의 다른 글
  • [프로그래머스] 자동완성 (트라이)
  • [프로그래머스] 야근지수 (힙)
  • [프로그래머스] 숫자 타자 대회 (재귀)
  • [프로그래머스] 아방가르드 타일링 (DP)
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Algorithm
    알고리즘
    힙
    DFS
    정렬
    프로그래머스
    재귀
    구간합
    DP
    최단거리
    최소신장트리
    백준
    BFS
    동적계획법
    구현
    LIS
    플로이드워셜
    트리
    자료구조
    월간코드챌린지
    스택
    조합
    최대공약수
    큐
    그리디
    이분탐색
    파이썬
    그래프
    덱
    다익스트라
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
[프로그래머스] 매출 하락 최소화 (DP, 트리)
상단으로

티스토리툴바