SoShin_
소신
SoShin_
전체 방문자
오늘
어제
  • 분류 전체보기
    • Study
      • HTML | CSS
      • JavaScript
      • Django
      • Python
      • Flask
      • Git
      • Project
      • 이것저것
      • 코딩테스트
      • NestJS
    • Review
      • Book
      • Movie & Drama

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • MongoDB
  • 문제풀이
  • allauth
  • node.js
  • 장고 제네릭뷰
  • 플라스크
  • 영화추천
  • 유저기능
  • 파이썬
  • Django 유효성 검증
  • js
  • openpyxl
  • SQLAlchemy
  • db
  • 자바스크립트
  • 코딩테스트
  • 위도경도
  • 장고 유저기능
  • orm
  • Django
  • SQLite
  • FLASK
  • Django allauth
  • 장고
  • JavaScript
  • 장고 allauth
  • flask orm
  • Python
  • KakaoAPI
  • 영화리뷰

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
SoShin_

소신

Study/코딩테스트

[ 문제 풀이 ] BOJ-14501 퇴사

2022. 3. 13. 15:57
반응형


📔 문제 설명

문제 풀러 가기

🧰 변수 설명

  • N
    • 타입 : 정수
    • 저장 데이터 : 일 수 입력
  • dp
    • 타입 : 리스트
    • 저장 데이터 : 각 날짜마다의 최대값을 저장
  • T
    • 타입 : 리스트
    • 저장 데이터 : 상담 소요 시간 저장
  • P
    • 타입 : 리스트
    • 저장 데이터 : 상담 금액 저장

🖨풀이 과정

1. 일 수를 입력 받는다 [N]
2. 시간과 금액을 저장할 리스트를 초기화 해준다. [T, P]
3. 반복문을 통해 N 만큼 반복하며 각 상담마다의 소요 시간과 금액을 입력받는다.
4. dp를 N+1 크기 만큼 초기화 해준다. (회사를 N+1 일에 나가기 때문에)
5. 시간을 초과하면 회사에 있지 않기 때문에 역순으로 반복문을 돈다.
6. 현재 날짜와 상담 소요시간을 더 한 값이 N보다 작다면 큰 값을 비교하여 큰 값을 dp에 넣는다.
7. 만약 현재 날짜와 상담 소요시간을 더한 값이 N보다 크면 dp[i] = dp[i+1] 을 해준다.
8. 마지막에 dp[0]에는 반복문을 종료 후 가장 큰 값이 들어있기 때문에 dp[0]를 출력해준다.
N = int(input())
T = [0 for i in range(N + 1)]
P = [0 for j in range(N + 1)]

for i in range(N):
    time, price = map(int, input().split())
    T[i] = time
    P[i] = price

# dp[i]는 i번째 날까지 일을 했을 때, 최대값을 저장한다!
dp = [0 for i in range(N + 1)]

for i in range(N - 1, -1, -1):  # 시간을 초과하면 상담을 하지 않기 때문에 역순으로 진행
    if T[i] + i <= N:  # 날짜를 초과하지 않을 경우.
        dp[i] = max(P[i] + dp[i + T[i]], dp[i + 1])

    else:  # 날짜를 초과할 경우.
        dp[i] = dp[i + 1]

print(dp[0])

# 각 날짜에 최대를 dp에 저장한 후 i 날에 일을 하는 기간인 T[i]를 더한값이 N을 넘으면 회사에 없기 때문에 불가
# 넘는다면 그 날일을 건너뛰고 그 전날로 돌아가 반복.
# 넘지 않는다면 max(P[i] + dp[i + T[i]], dp[i + 1]) 를 통해 현재 총액 + 상담금액과 그 전에 저장된 dp 값을 비교해서
# 더 큰 값을 dp에 저장한다.

시간 : 68ms

반응형

'Study > 코딩테스트' 카테고리의 다른 글

[문제 풀이 ] 프로그래머스 최소 직사각형  (0) 2022.02.08
[문제 풀이] BOJ-2805 나무 자르기  (0) 2022.02.08
[ 문제 풀이 ] BOJ-1931 회의실 배정  (0) 2022.02.08
BOJ-1932 정수 삼각형  (0) 2022.02.08
[문제 풀이] BOJ - 1270 전쟁 - 땅따먹기  (0) 2022.02.02
    'Study/코딩테스트' 카테고리의 다른 글
    • [문제 풀이 ] 프로그래머스 최소 직사각형
    • [문제 풀이] BOJ-2805 나무 자르기
    • [ 문제 풀이 ] BOJ-1931 회의실 배정
    • BOJ-1932 정수 삼각형
    SoShin_
    SoShin_
    직접 쓰는 개발 블로그

    티스토리툴바