백준: Class 3 ⑦ - 11724, 11726, 11727
</br>
클래스 3 계속 계속
</br>
11724: 연결 요소의 개수
https://www.acmicpc.net/problem/11724
void bfs(){
while( q.size() ){
int x = q.front();
q.pop();
for(int i = 1; i <= n; i++){
if( graph[x][i] == 1 && visited[i] == 0 ){
q.push(i);
visited[i] = 1;
}
}
}
}
// in main()
int cnt = 0;
for(int i = 1; i <= n; i++){
if( visited[i] == 1 ) continue;
visited[i] = 1;
cnt++;
for(int j = 1; j <= n; j++){
if( graph[i][j] == 1 && visited[j] == 0 ){
q.push(j);
visited[j] = 1;
bfs();
}
}
}
cout << cnt << '\n';
만약 방문한 노드가 아니면 방문했다고 표시하고 그룹 카운트를 늘린 뒤, 같은 그룹 내 노드들을 탐색 하면 된다.
</br>
11726: 2×n 타일링
https://www.acmicpc.net/problem/11726
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
for(int i = 3; i <= n; i++){
dp[i] = dp[i-1] + dp[i-2];
dp[i] %= 10007;
}
cout << dp[n] << '\n';
간단 간단하게
dp는 항상 문제에서 모듈러 하라 하면 그거 꼭 해 주기
</br>
또 비슷한 자매품
11727: 2×n 타일링 2
https://www.acmicpc.net/problem/11727
dp[0] = 0;
dp[1] = 1;
dp[2] = 3;
for(int i = 3; i <= n; i++){
dp[i] = dp[i-1] + dp[i-2]*2;
dp[i] %= 10007;
}
cout << dp[n] << '\n';
블럭 종류만 추가 되었다
2칸 전인 dp[i-2]
에서 선택권이 2개가 되었으므로 *2
해주면 된다.
ex) n = 3
1: 2*1 블럭
= : 1*2 블럭 세로로 2개
ㅁ: 2*2 블럭
dp[3-1] = 3
11 1
= 1
ㅁ 1
dp[3-2] * 2 = 1 * 2 = 2
1 ㅁ
1 =
</br>
</br>
댓글남기기