본문 바로가기

[CodeTree/C++] 행복한 수열의 개수 : 시뮬레이션

@hyeon.s2024. 2. 9. 02:15

문제 설명

1이상 100이하의 숫자로만 이루어져 있는 n * n 크기의 격자 정보가 주어집니다.

이때 행복한 수열이라는 것은 다음과 같이 정의됩니다.

  • 행복한 수열 = 연속하여 m개 이상의 동일한 원소가 나오는 순간이 존재하는 수열

n * n 크기의 격자 정보가 주어졌을 때 각 행마다 봤을 때 나오는 n개의 수열과, 각 열마다 봤을 때 나올 수 있는 n개의 수열을 포함하여 총 2n개의 수열 중 행복한 수열의 개수를 세서 출력하는 프로그램을 작성해보세요.

입력 형식

첫 번째 줄에는 격자의 크기를 나타내는 n과 연속해야 하는 숫자의 수를 나타내는 m이 공백을 사이에 두고 주어집니다.

두 번째 줄부터는 n개의 줄에 걸쳐 격자에 대한 정보가 주어집니다. 각 줄에는 각각의 행에 대한 정보가 주어지며, 이 정보는 1이상 100이하의 숫자가 각각 공백을 사이에 두고 주어집니다.

  • 1 ≤ m ≤ n ≤ 100

출력 형식

2n개의 수열들 중 행복한 수열의 수를 출력해주세요.

코드

정답코드

#include <iostream>
using namespace std;

int arr[101][101] = {};

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    int n, m;
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> arr[i][j];
        }
    }

    int cnt = 1;
    int ans = 0;
    int stn;

    for (int i = 0; i < n; i++) {
        cnt = 1;
        for (int j = 0; j < n; j++) {
            if (j == 0) {
                stn = arr[i][j];
            }
            else {
                if (stn == arr[i][j]) {
                    cnt++;
                }
                else {
                    cnt = 1;
                    stn = arr[i][j];
                }
            }
            if (cnt == m) {
                ans++;
                break;
            }
        }
    }

    int stnCol;
    for (int i = 0; i < n; i++) {
        cnt = 1;
        for (int j = 0; j < n; j++) {
            if (j == 0) {
                stnCol = arr[j][i];
            }
            else {
                if (stnCol == arr[j][i]) {
                    cnt++;
                }
                else {
                    stnCol = arr[j][i];
                    cnt = 1;
                }

            }
            if (cnt == m) {
                ans++;
                break;
            }
        }
    }

    cout << ans << "\n";
}​

참고블로그

#1 틀린 시도 코드

#include <iostream>
using namespace std;

int arr[101][101] = {};

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

    int n, m;
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> arr[i][j];
        }
    }

    int cnt = 1;
    int ans = 0;

    for (int i = 0; i < n; i++) {
        int stn = arr[i][0];
        for (int j = 0; j < n-1; j++) {
            if (arr[i][j] == arr[i][j + 1]) {
                stn = arr[i][j];
                cnt++;
            }
            else {
                stn = arr[i][j + 1];
                cnt = 1;
            }
        }
        if (cnt == m) {
            ans++;
        }
    }
hyeon.s
@hyeon.s :: 개발로그
목차