N

(SWEA c++)1216. [S/W 문제해결 기본] 3일차 - 회문2 본문

SW Expert Academy

(SWEA c++)1216. [S/W 문제해결 기본] 3일차 - 회문2

naeunchan 2020. 10. 8. 11:25
728x90
반응형

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14Rq5aABUCFAYi&categoryId=AV14Rq5aABUCFAYi&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

1215 회문1 문제와 비슷하다.

다만 가장 긴 회문의 길이만 찾아서 출력하면 된다.

 

while문으로 가장 긴 회문을 찾을 때까지 반복.

n = 100 ~ 0까지, 현재 회문의 길이를 나타낸다.

 

회문의 길이가 100부터 시작하므로

맨 처음 찾은 회문의 길이가 가장 큰 값을 나타낸다.

가로, 세로를 검사하여 확인해주면 된다.

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main(void)
{
    for(int t = 1; t <= 10; t++)
    {
        vector<string> v;
        int n, max = 0;
        string s;
        bool flag = true;
        
        cin >> n;
        
        for(int i = 0; i < 100; i++)
        {
            cin >> s;
            v.push_back(s);
        }
        
        n = 100;
        
        while(flag)
        {
            //row check
            for(int i = 0; i < 100; i++)
            {
                for(int j = 0; j <= 100 - n; j++)
                {
                    bool rowKeep = true;
                    for(int k = 0; k < n / 2; k++)
                    {
                        if(v[i][j + k] != v[i][j + n - k - 1])
                        {
                            rowKeep = false;
                        }
                    }
                    if(rowKeep)
                    {
                        max = n;
                        flag = false;
                        break;
                    }
                }
            }
            
            //col check
            for(int i = 0; i <= 100 - n; i++)
            {
                for(int j = 0; j < 100; j++)
                {
                    bool colKeep = true;
                    for(int k = 0; k < n / 2; k++)
                    {
                        if(v[i + k][j] != v[i + n - k - 1][j])
                        {
                            colKeep = false;
                        }
                    }
                    if(colKeep)
                    {
                        max = n;
                        flag = false;
                        break;
                    }
                }
            }
            n--;
        }
        cout << "#" << t << " " << max << endl;
    }
    return 0;
}
728x90
반응형