728x90
반응형
https://www.acmicpc.net/problem/2482
2482번: 색상환
첫째 줄에 N색상환에서 어떤 인접한 두 색도 동시에 선택하지 않고 K개의 색을 고를 수 있는 경우의 수를 1,000,000,003 (10억 3) 으로 나눈 나머지를 출력한다.
www.acmicpc.net
1. Logic
해당 문제를 환형으로 보지말고 그냥 직선형으로 봐서 0번째 색깔을 선택하는 경우와 0번째 색깔을 선택하지 않는 경우 2가지로 나눠서 해결했다.
0번째 색깔을 을 선택하는 경우는 1번째 색깔을 절대로 선택 못하기 때문에 인덱스를 2로 올려준 후 함수로 전달한다.
0을 선택하지 않는 경우는 1번 색깔을 선택해도 되고 안해도 되기 때문에 인덱스는 1, cnt는 0 으로 넣어준다
2. Code
#include <bits/stdc++.h>
using namespace std;
int n, k;
int dp[1001][1001][2];
int vis[1001];
int solve(int idx, int cnt, int type) {
if(cnt == k) return 1;
if(idx == n-1 && cnt == k-1) {
if(type == 0) return 1;
else return 0;
}
if(idx >= n || cnt > k) return 0;
int &ret = dp[idx][cnt][type];
if(ret != -1) return ret;
ret = 0;
ret += solve(idx+1, cnt, type);
ret += solve(idx+2, cnt+1, type);
return ret %= 1000000003;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
memset(dp, -1, sizeof(dp));
cin >> n >> k;
cout << (solve(1, 0, 0) + solve(2, 1, 1)) % 1000000003;
}
알고리즘 Solve 후 제가 생각한 Logic을 기록하는 개인 공부 블로그입니다.
내용 중 최적화가 가능한 부분등은 언제든지 댓글로 틀린 부분 및 피드백 주시면 공부 및 반영하겠습니다🧐
728x90
반응형
'Algorithm > Beakjoon' 카테고리의 다른 글
[백준/Baekjoon] 1240 노드사이의 거리 C++ :: Graph & BFS (2) | 2023.12.06 |
---|---|
[백준/Baekjoon] 9656 돌 게임 2 C++ :: Implementation (1) | 2023.12.06 |
[백준/Baekjoon] 2578 빙고 C++ :: Implementation (1) | 2023.12.04 |
[백준/Baekjoon] 2441 별 찍기 - 4 C++ :: Implementation (0) | 2023.12.03 |
[백준/Baekjoon] 4195 친구 네트워크 C++ :: Union find & Data structure (1) | 2023.12.03 |