BOJ - 11058번 크리보드(C++)

woga·2020년 10월 5일
0

BOJ

목록 보기
42/83
post-thumbnail

문제 출처: https://www.acmicpc.net/problem/11058

문제 난이도

Silver 1


문제 접근법

1번 빼고 2~3번은 세트고 4번일 때 원래 있던 버퍼로 추가할 수 있다.
1) 버튼 한 번 누르기 전 A 개수 + 1
2) 만약 충분히 세트로 이루고 남는다면, 4번 누르기 전 2,3번 누르니깐 버튼 세 번 누르기 전 A 개수 x 2 개 가능 -> 왜냐면 전체 창에 있는 A개수 복사해서 4번이란 버튼으로 한 번 더 추가되는거니깐.
3) 2,3,4번 누르기 한 번 더 전에 있던 화면 A 개수를 복사한 채로 붙여넣기를 2번 한다면, 2,3,4,4번 버튼 누르기 전(i-4)은 붙여넣기가 2번이니깐 화면 속 A가 3번 반복 -> i-4 x 3 개수 가능
4) 2,3,4,4,4번 버튼을 누르기 전(i-5)이면 붙여넣기가 3번 -> i-5 x 4개 가능

주의 : long long 데이터형을 써야함


통과 코드

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#define INF 987654321
#define MAX 1000001

using namespace std;

long long dp[101];

int main() {
	int N;
	cin >> N;
	dp[1] = 1;
	dp[2] = 2;
	dp[3] = 3;
	dp[4] = 4;
	dp[5] = 5;
	dp[6] = 6;

	for (int i = 7; i <= N; i++) {
		dp[i] = max({dp[i-1]+1, dp[i-3]*2, dp[i-4]*3,dp[i-5]*4});
	}
	cout << dp[N];
	
	return 0;
}

피드백

max 알고리즘 함수에 {}로 둬서 여러 인자들을 비교할 수 있는 걸 첨 알았다! 다를 때에도 쓸 수 있을듯

profile
와니와니와니와니 당근당근

0개의 댓글