티스토리 뷰

알고리즘/백준

[백준] 14501번 퇴사

JeongHyeon 2018. 4. 10. 00:49

문제

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

풀이

삼성 기출문제 중에 난이도가 낮은 편에 속하는 것 같다.

N의 범위가 작기 때문에 완전탐색으로 풀었다.

오늘 예약된 상담을 진행하느냐 안하느냐 두 가지로 나누어서 재귀호출을 진행하면 된다.

계속 재귀함수의 조건이 헷갈려서 많이 틀렸다.

curr_day 가 n일 때 끝내는 이유는 curr_day가 n-1이고 상담에 걸리는 기간이 1일이면 하루만에 끝내고 수익을 얻을 수 있기 때문이다.

소스코드

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

#define MAX_SIZE 16

int n;
int ans;
vector<pair<int, int>> vec_tp(MAX_SIZE, make_pair(0, 0));

void Recur(int curr_day, int curr_sum)
{
    // 끝나는 경우
    if (curr_day == n )
    {
        ans = max(ans, curr_sum);
        return;
    }

    int next_day = curr_day + vec_tp[curr_day].first;

    // 오늘 상담 하는 경우
    if (next_day <= n)
        Recur(next_day, curr_sum + vec_tp[curr_day].second);
    // 오늘 상담 안하는 경우
    if (curr_day + 1 <= n) 
        Recur(curr_day + 1, curr_sum);

}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    cin >> n;

    for (int i = 0; i < n; i++)
    {
        cin >> vec_tp[i].first >> vec_tp[i].second;
    }

    Recur(0, 0);

    cout << ans << "\n";

    return 0;
}

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 14499번 주사위 굴리기  (0) 2018.04.11
[백준] 3190번 뱀  (0) 2018.04.10
[백준] 14891번 톱니바퀴  (0) 2018.04.09
[백준] 14890번 경사로  (0) 2018.04.09
[백준] 14889번 스타트와 링크  (0) 2018.04.07
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함