[백준] 계단 오르기

bin1225·2022년 11월 24일
0

c++ 알고리즘

목록 보기
26/35


며칠전에 시도했다 포기했던 문제를 다시 고민해봤다.
처음 생각했던 방법은 배열 f를 하나 선언하고,
i번째에서 조건에 따라 i+1번째와 i+2번째 값을 업데이트 하는 방식이었다.
이 방법으로 특정 케이스들은 해결했지만 계속 오류가 나서 다시 방법을 찾았다.

이번학기 알고리즘 수업에서 Dynamic Programing을 배울 때 스케줄링 문제를 접한 적이 있는데 그때와 비슷하게 구성해야겠다고 생각해서, 각 계단에서 케이스를
1. 연속으로 2번 1칸씩 온 경우
2. 1칸씩 온 경우
3. 2칸으씩 온 경우
로 케이스를 나누고, 각각 조건에 맞게 업데이트 해주는 방식으로 해결하였다.

뭔가 될 듯 말듯 않돼서 계속 하루 종일 붙잡고 있었다. 처음에 될 것 같은 아이디어가 떠오르면 거기에 너무 집착하게 되는 것 같다. 좀 더 명확한 방법을 생각하려고 노력해야겠다.

#include<stdio.h>
#include<iostream>
#include<vector>

using namespace std;


int main(){
	
	int n, m;
	cin>>n;
	
	vector<int> scores;
	for(int i=0; i<n; i++){
		cin>>m;
		scores.push_back(m);
	}
	
	
	int f1[n] ={0};
	int f2[n] ={0};
	int f3[n] ={0};
	f1[0] = scores[0];
	f2[0] = scores[0];
	f3[0] = 0;
	for(int i=1; i<n; i++){
		f1[i] = f2[i-1] + scores[i]; 
		f2[i] = f3[i-1] + scores[i];
		f3[i] = max(f1[i-1],f2[i-1]);
			
			
	
	}
	int answer = max(f1[n-1],f2[n-1]);
	cout<<answer;
	
}

0개의 댓글