문제 링크 : https://programmers.co.kr/learn/courses/30/lessons/42896

 

프로그래머스

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

programmers.co.kr

문제 설명 

카드 더미가 있는데 왼쪽 오른쪽으로 나뉘어 있음.

왼쪽 카드는 조건없이 버릴수있고 오른쪽 카드는 왼쪽카드와 같이 버리거나         ---(1)

왼쪽카드에 적힌 수> 오른쪽카드 에 적힌 수 일 때만 버릴 수있다.                    ---(2)

점수는 (2)의경우에만 오른쪽 카드에 적힌 수만 큼 휙득 .. 

 

알고리즘 ..

DP 로 가야될꺼같아서 DP 로 풀었당 어렵당 .. :/

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<iostream>
#include<algorithm>
#include <string>
#include <vector>
 
using namespace std;
vector<int> a;  // L
vector<int> b;   //R
int Size;
int dp[2002][2002];
int func(int L, int R) {
    if (L == Size || R == Size) return dp[L][R]; //한쪽 카드를 다버리면 끝 ~ 
    if (dp[L][R] != 0return dp[L][R]; 
    
        dp[L][R] = max(func(L + 1, R), func(L + 1, R + 1)); //왼쪽만 버리거나 둘다버리거나
        if (a[L] > b[R]) {
            dp[L][R] = max(dp[L][R], func(L, R + 1+ b[R]);//오른쪽만 버리고 점수휙득.
        }
        return dp[L][R];
 
}
 
 
int solution(vector<int> left, vector<int> right) {
    a = left;    
    b = right;
    Size = a.size();
    int answer = func(00);
    return answer;
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
 

 

 

 

 

'c++ > 프로그래머스' 카테고리의 다른 글

프로그래머스: 종이접기  (0) 2020.04.09
프로그래머스 : 서울에서 경산까지  (0) 2020.04.07
프로그래머스 : 탑  (0) 2020.04.02
프로그래머스 : 체육복  (0) 2020.04.02
프로그래머스 : 숫자야구  (0) 2020.04.02
ariz1623