728x90
반응형
https://www.acmicpc.net/problem/11054
1. Logic
부분문제를 나눠보자면
1. 오름차순으로 받는경우
1-1. 이전에 선택한 숫자보다 현재 인덱스의 숫자가 큰경우 > 선택
1-2. 이전에 선택한 숫자보다 현재 인덱스의 숫자가 작은 경우 > 내림차순으로 변경하고 선택
2. 내림차순으로 변경된 경우
2-1. 이전에 선택한 숫자보다 현재 인덱스의 숫자가 작은경우 > 선택
3. 선택안하고 인덱스를 넘기는 경우
2. Code
#include <bits/stdc++.h>
using namespace std;
int n;
int input[1001];
int dp[1001][1005][2];
int solve(int idx, int prevSelect, int turnCheck) {
if(idx == n) return 0;
int &ret = dp[idx][prevSelect][turnCheck];
if(ret != -1) return ret;
ret = 0;
//오름차순일때
if(turnCheck == 0) {
if(prevSelect < input[idx]) {
//현재 선택
ret = max(ret, solve(idx+1, input[idx], turnCheck)+1);
}
//이번에 내림차순으로 변경하고 선택
else if(prevSelect > input[idx]) {
ret = max(ret, solve(idx+1, input[idx], 1)+1);
}
}
else {
if(prevSelect > input[idx]) {
ret = max(ret, solve(idx+1, input[idx], turnCheck)+1);
}
}
ret = max(ret, solve(idx+1, prevSelect, turnCheck));
return ret;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
memset(dp, -1, sizeof(dp));
cin >> n;
for(int i = 0; i < n; i++) {
cin >> input[i];
}
int ans = max(solve(0, 0, 0), solve(0, 1002, 1));
cout << ans;
}
알고리즘 Solve 후 제가 생각한 Logic을 기록하는 개인 공부 블로그입니다.
내용 중 최적화가 가능한 부분등은 언제든지 댓글로 틀린 부분 및 피드백 주시면 공부 및 반영하겠습니다🧐
728x90
반응형
'Algorithm > Beakjoon' 카테고리의 다른 글
[백준/Baekjoon] 1194 달이 차오른다, 가자. C++ :: BFS & Implementation (1) | 2023.12.28 |
---|---|
[백준/Baekjoon] 17144 미세먼지 안녕! C++ :: Implementation (1) | 2023.12.27 |
[백준/Baekjoon] 2580 스도쿠 C++ :: Back tracking & Implementation (0) | 2023.12.25 |
[백준/Baekjoon] 20056 마법사 상어와 파이어볼 C++ :: Implementation (1) | 2023.12.23 |
[백준/Baekjoon] 3055 탈출 C++ :: BFS (1) | 2023.12.22 |