안녕하세요. 오늘은 얼룩말을 찾을 거예요.

문제

https://www.acmicpc.net/problem/30454

아이디어

특정 얼룩말의 줄의 개수를 세는 방법은 간단합니다.
s[0]이 '1'이면 기본값 1, 아니면 0으로 한 다음에 s[j-1]이 '0'이고 s[j]가 '1'인 j의 개수를 더해주면 됩니다.

최댓값과 그 개수를 세어주면 됩니다.

소스코드

#include <iostream>
#include <string>
using namespace std;


int main(void)
{
    ios_base::sync_with_stdio(false); cin.tie(NULL);
    int N, L, i, mx = 0, cnt = 0;
    cin >> N >> L;
    for (i = 0; i < N; i++)
    {
        string s;
        cin >> s;

        int onecnt = 0;
        if (s[0] == '1') onecnt++;
        for (int j = 1; j < L; j++)
        {
            if (s[j - 1] == '0' && s[j] == '1')
                onecnt++;
        }  

        if (mx < onecnt)
        {
            mx = onecnt;
            cnt = 0;
        }
        if (mx == onecnt) cnt++;
    }
    cout << mx << ' ' << cnt;
}


감사합니다.

1개의 댓글

comment-user-thumbnail
2023년 11월 7일

.... 아레나때 혼자 이 문제 9번 풀다가 시간만 날리고 멘탈나가서 포기했었는데
너무 복잡하게 생각해서 못푼거였네요 풀이감사합니다.

답글 달기