Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- 산업 스파이의 편지
- 다이나믹 프로그래밍
- 18113
- 마스크 5부제
- 알고리즘
- 18235
- 마스크 재고 확인
- 9328
- image crawling
- 이분 탐색
- 메일 전체 읽기
- 18115
- 욱제가 풀어야 하는 문제
- 3671
- 15486
- 깊이 우선 탐색
- 18114
- 18249
- 18248
- 에라토스테네스의 체
- 부루트 포스
- meet in the middle
- 그르다 김가놈
- 퇴사 2
- 단어 수학
- 카드 놓기
- 공적 마스크
- 냅색문제
- 9466
- BOJ
Archives
- Today
- Total
groti's blog
[BOJ] 18249 - 욱제가 풀어야 하는 문제 본문
1. 문제 해석
- 각각의 빨간색 정점과 파란색 정점이 N개가 있다. 각 정점은 1~N의 번호를 가진다.
- 1 ≤ i ≤ N인 자연수 i에 대해 빨간색 i번 정점과 파란색 i번 정점을 연결하는 간선이 존재한다.
- 2 ≤ i ≤ N인 자연수 i에 대해 빨간색 i-1번 정점과 파란색 i번 정점을 연결하는 간선이 존재한다.
- 2 ≤ i ≤ N인 자연수 i에 대해 빨간색 i번 정점과 파란색 i-1번 정점을 연결하는 간선이 존재한다.
- 서로 다른 간선의 끝점을 공유하지 않도록 N개의 간선을 선택하는 방법의 수를 구해야 한다.
(1 <= N <= 191,229, 정답을 10e9+7로 나눈 나머지를 출력)
2. 접근방법
- <그림1>과 <그림2>에서 알 수 있듯이 4번 정점의 간선 선택은 이전 정점까지의 선택과 연관되어 있다.
- <그림1>과 같이 빨간색 정점 4번과 파란색 정점 4번을 연결하는 간선을 선택할 경우 정점 3번까지 3개의 간선을 선택하는 방법의 수와 같다.
- <그림2>와 같이 빨간색 정점 3번과 파란색 정점 4번, 빨간색 정점 4번과 파란색 정점 3번을 연결하는 간선을 선택할 경우 정점 2번까지 2개의 간선을 선택하는 방법의 수와 같다.
- 결국 [정점 4번까지 4개의 간선]을 선택하는 방법은 [정점 3번까지 3개의 간선]을 선택하는 방법의 수와 [정점 2번까지 2개의 간선]을 선택하는 방법의 수를 합하면 된다.
- 따라서 d[N]을 정점 N번까지 N개의 간선을 선택하는 방법이라고 하면 d[N] = d[N - 1] + d[N - 2]가 된다
3. 주의할 점
- [N = 2]인 경우 N개의 간선을 선택하는 2가지 방법이 있다.
4. 소스코드
더보기
#include <iostream>
#include <algorithm>
#define MAX 191230
using namespace std;
int T, N;
int d[MAX];
int mod = 1000000007;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
d[1] = 1, d[2] = 2;
for (int i = 3; i < MAX; i++) {
d[i] = (d[i - 2] + d[i - 1]) % mod;
}
cin >> T;
while (T--) {
cin >> N;
cout << d[N] << '\n';
}
return 0;
}
'알고리즘 > BOJ 문제 풀이' 카테고리의 다른 글
[BOJ] 1339 - 단어 수학 (0) | 2020.01.17 |
---|---|
[BOJ] 18248 - 제야의 종 (0) | 2020.01.08 |
[BOJ] 18235 - 지금 만나러 갑니다 (0) | 2020.01.04 |
[BOJ] 18234 - 당근 훔쳐 먹기 (0) | 2019.12.24 |
[BOJ] 18116 - 로봇 조립 (0) | 2019.12.18 |
Comments