수미니그
개발자 X
수미니그
전체 방문자
오늘
어제
  • 전체 (17)
    • Algorithms (13)
      • Concepts (0)
      • 백준 (BOJ) (4)
      • 프로그래머스 (Programmers) (9)
    • SQL (4)
    • 일상 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • count
  • Dictionary
  • 구현
  • Python
  • 집계 함수
  • sum
  • group by
  • SQL
  • MIN
  • Lambda
  • 알고리즘 풀이
  • DP
  • DFS
  • 정렬
  • 소수
  • MAX
  • 프로그래머스
  • BFS
  • programmers
  • 스택
  • select
  • Algorithm
  • 해시
  • n진수
  • 자료구조
  • 백준
  • BOJ

최근 댓글

최근 글

@ 수미니그
hELLO · Designed By 정상우.
수미니그

개발자 X

[백준] 14501번 퇴사 (Python)
Algorithms/백준 (BOJ)

[백준] 14501번 퇴사 (Python)

2022. 3. 23. 17:52
 

14501번: 퇴사

첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다.

www.acmicpc.net

백준 14501번: 퇴사 문제 설명
백준 14501번 퇴사: 입출력 및 예제

 


문제 풀이

참고로 해당 문제는 삼성 SW 역량 테스트 기출문제로 분류되어 있고 solved.ac기준 실버 III 난이도다

예제 입력1을 기준으로 천천히 생각해보자

첫째 날에 상담을 할 수도 안 할 수도 있다

  • 상담을 한다면: 10만큼의 금액을 벌고 3일 뒤에 다시 상담 여부를 결정한다
  • 반대로, 상담을 안 한다면: 0의 금액을 벌고 그다음 날에 상담 여부를 결정한다
  • 이런 식으로 N만큼의 날짜가 흐를 동안 벌 수 있는 금액 중 최댓값을 구하면 된다

위 로직에 따라 DFS를 활용하면 문제를 해결할 수 있다

import sys
sys.setrecursionlimit(10**6)
n = int(sys.stdin.readline())
t = []
p = []
arr = []

for i in range(n):
    ti, pi = sys.stdin.readline().rstrip().split()
    t.append(int(ti))
    p.append(int(pi))

def dfs(day, earn):
    if day >= n:
        arr.append(earn)
        return
    #현재 day + 소요 day가 n보다 크면 상담을 하지 않는 조건을 붙여준다
    if (day+t[day]) <= n:
    	#현재 day에서 상담을 진행하는 경우
        dfs(day+t[day], earn+p[day])
    #현재 day에서 상담을 진행하지 않는 경우
    dfs(day+1, earn)

dfs(0, 0)
print(max(arr))

 

GitHub에서 코드 보기

'Algorithms > 백준 (BOJ)' 카테고리의 다른 글

[백준] 1520번 내리막 길 (Python)  (0) 2022.03.31
[백준] 7576번 토마토 (Python)  (0) 2022.03.31
[백준] 2002번 추월 (Python)  (0) 2022.03.24
    수미니그
    수미니그

    티스토리툴바