[백준/Baekjoon] 2240 자두나무 C++ :: Dynamic Programming

2023. 11. 10. 18:50· Algorithm/Beakjoon
목차
  1. 1. Logic
  2. 2. Code
  3. 3. Feedback
728x90
반응형

https://www.acmicpc.net/problem/2240

 

2240번: 자두나무

자두는 자두를 좋아한다. 그래서 집에 자두나무를 심어두고, 여기서 열리는 자두를 먹고는 한다. 하지만 자두는 키가 작아서 자두를 따먹지는 못하고, 자두가 떨어질 때까지 기다린 다음에 떨어

www.acmicpc.net


1. Logic

먼저 DP테이블이 의미하는 것은 n초에 먹을 수 있는 자두의 최대 갯수이다.

dp[자두떨어지는 시간][움직인횟수][위치한나무번호]

 

부분문제를 쪼개보자면

 

시작할때는 

1. 1번 나무에서 시작하는 경우

2. 2번 나무에서 시작하는 경우

 

이후에는 

1-1. 1번나무에서 받아먹고 계속 1번에 있는 경우

1-2. 1번나무에서 받아먹고 2번나무로 옮기는 경우

2. 2번나무에서 받아먹고 계속 2번에 있는 경우

2. 2번 나무에서 받아먹고 1번 나무로 옮기는 경우

이렇게 4가지가 있는데 여기서 해당 나무의 번호와 지금 떨어지는 자두의 나무가 일치했을 경우의 갯수만 세주면 된다.


2. Code

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
int t, w;
int dp[1001][31][3];
vector<int> tree;
int solve(int cnt, int moveCnt, int treeNum) {
if(cnt == t+1) return 0;
int &ret = dp[cnt][moveCnt][treeNum];
if(ret != -1) return ret;
ret = 0;
if(cnt == 0) {
//원래 1의 자리에서 시작
ret = max(ret, solve(cnt+1, moveCnt, 1));
// 2의 자리로 옮겨서 시작
ret = max(ret, solve(cnt+1, moveCnt+1, 2));
}
else {
if(tree[cnt] == treeNum) {
ret = max(ret, solve(cnt+1, moveCnt, treeNum) + 1);
if(treeNum == 1 && moveCnt+1 <= w) {
ret = max(ret, solve(cnt+1, moveCnt+1, 2)+1);
}
else if(treeNum == 2 && moveCnt+1 <= w){
ret = max(ret, solve(cnt+1, moveCnt+1, 1)+1);
}
}
else {
if(treeNum == 1) {
ret = max(ret, solve(cnt+1, moveCnt, 1));
}
else {
ret = max(ret, solve(cnt+1, moveCnt, 2));
}
}
if(treeNum == 1 && moveCnt+1 <= w) {
ret = max(ret, solve(cnt+1, moveCnt+1, 2));
}
else if(treeNum == 2 && moveCnt+1 <= w){
ret = max(ret, solve(cnt+1, moveCnt+1, 1));
}
}
return ret;
}
int main()
{
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
memset(dp, -1, sizeof(dp));
cin >> t >> w;
tree.push_back(-1);
for(int i = 0; i < t; i++) {
int tr;
cin >> tr;
tree.push_back(tr);
}
cout << solve(0, 0, 1);
}

3. Feedback

골드 5짜리 DP를 혼자 풀었다!! 역시 꾸준함의 힘은 대단하다.

알고리즘 Solve 후 제가 생각한 Logic을 기록하는 개인 공부 블로그입니다.
내용 중 최적화가 가능한 부분등은 언제든지 댓글로 틀린 부분 및 피드백 주시면 공부 및 반영하겠습니다🧐

 

 

728x90
반응형

'Algorithm > Beakjoon' 카테고리의 다른 글

[백준/Baekjoon] 2776 암기왕 C++ :: Binary Search & map  (0) 2023.11.12
[백준/Baekjoon] 17266 어두운 굴다리 C++ :: Binary Search  (0) 2023.11.11
[백준/Baekjoon] 1138 한 줄로 서기 C++ :: Implementation & Greedy  (0) 2023.11.09
[백준/Baekjoon] 14891 톱니바퀴 C++ :: Implementation  (0) 2023.11.08
[백준/Baekjoon] 2563 색종이 C++ :: Implementation  (0) 2023.11.07
  1. 1. Logic
  2. 2. Code
  3. 3. Feedback
'Algorithm/Beakjoon' 카테고리의 다른 글
  • [백준/Baekjoon] 2776 암기왕 C++ :: Binary Search & map
  • [백준/Baekjoon] 17266 어두운 굴다리 C++ :: Binary Search
  • [백준/Baekjoon] 1138 한 줄로 서기 C++ :: Implementation & Greedy
  • [백준/Baekjoon] 14891 톱니바퀴 C++ :: Implementation
보글보글소다
보글보글소다
Conquer Mind, Conquer All보글보글소다 님의 블로그입니다.
반응형
보글보글소다
Conquer Mind, Conquer All
보글보글소다
전체
오늘
어제
  • 분류 전체보기
    • Algorithm
      • Beakjoon
      • Programmers
    • Frontend
      • React.js
      • JavaScript
    • Backend
      • Java
      • Spring
      • Node.js
    • Design Pattern
    • Computer Science
      • Algorithm
      • 컴퓨터구조
      • 운영체제
      • 네트워크
      • 데이터베이스
      • 자료구조
    • Projects
      • 식단 짜주는 웹
    • 정보보호병
      • Study In military
      • 정보보호병
    • 인공지능
      • 논문 리뷰

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리
  • 글쓰기

공지사항

인기 글

태그

  • 백준 풀이
  • 스프링
  • 운영체제
  • 동적계획법
  • 그래프
  • 이분탐색
  • 코딩테스트
  • BFS
  • 알고리즘 풀이
  • 백엔드
  • 알고리즘
  • Programmers
  • 백준
  • 구현
  • DP
  • 프로그래머스
  • 자료구조
  • Algorithm
  • spring
  • BaekJoon

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.v4.2.2
보글보글소다
[백준/Baekjoon] 2240 자두나무 C++ :: Dynamic Programming
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.