백준: Class 3 ⑦ - 11724, 11726, 11727

1 분 소요


</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>

댓글남기기