호빵이의 알고리즘

[14501번] 퇴사 본문

알고리즘/BOJ

[14501번] 퇴사

남현경 2018. 8. 6. 17:22


#include 
#include 
using namespace std;

int N, ret;
int T[16], P[16];
int next_day, total = 0;

void solve(int day, int sum) {
	if (day == N+1) {
		ret = max(ret, sum);
		return;
	}
	next_day = day + T[day];
	total = sum + P[day];
	if (next_day <= N+1)//여기서도 계속 돌고
		solve(next_day, total);
	if (day + 1 <= N+1) //여기서도 계속 돌고 결국엔 가장 큰 값!!!
		solve(day + 1, sum);
}
int main() {
	cin >> N;
	for (int i = 1; i <= N; i++) 
		cin >> T[i] >> P[i];
	solve(1, 0);
	cout << ret;
}

스터디 숙제로 푼 문제 !

되게 간단한 문제라고 생각했는데 return을 해주는 게 너무 미숙해서 시간이 오래걸렸다..ㅠㅠ 재귀함수 짜는 것은 앞으로도 계속 연습을 해봐야될 것 같다. 이번 문제에서는 N이 작기 때문에 DFS방법을 선택했다(완전탐색).


day=1부터 시작해서 두개의 if 문으로 첫 번째에서는 계속 T[day]를 더해가며 쭉 total 값을 구하도록 하였고 그 다음 if문에서는 1,2,3~N일까지 

모두 탐색할 수 있게 해주었다!! 생각해내기가 어려웠지만 나중에 적응이 된다면 쉽게 풀 수 있을 것 같다!

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

[삼성SW테스트] 드래곤 커브  (0) 2018.08.06
[1931번] 회의실배정  (0) 2018.07.30
[2331번] 반복수열  (0) 2018.07.30
[10825] 국영수  (0) 2018.07.30
[1992번] 쿼드트리  (0) 2018.07.26