본문 바로가기
SWE/코테

[SW Expert Academy] '6' #1215 회문1 **

by S나라라2 2019. 3. 12.
반응형

회문 = Palindrome

백준에서 풀었던 적 있는 것 같은데 기억이 안난다...


좋지 않은 방법으로 푼 것 같다.(노가다) 다른 방식 찾아봐야겠다


// #1215 회문
#include < iostream >
#include < string >

using namespace std;
int board[8][8];

// 가로 회문 가능 return 1
// 회문 불가능 return 0
int checkPalindrome_row(int _r, int _c, int _len){
    int len = _len;
    
    // 가로 체크
    bool flag = true;
    for(int c=_c; c<8; c++){
        if( board[_r][c] != board[_r][c+len] ){
            flag = false;
            break;
        }
        len -= 2;
        if(len <= 0){
            break;
        }
    }
    if(flag==true) return 1;
    return 0;
}

// 세로 회문 가능 return 1
// 회문 불가능 return 0
int checkPalindrome_column(int _r, int _c, int _len){
    int len = _len;
    
    // 세로 체크
    bool flag = true;
    for(int r=_r; r < 8; r++){
        if( board[r][_c] != board[r+len][_c] ){
            flag = false;
            break;
        }
        len -= 2;
        if(len <= 0){
            break;
        }
    }
    if(flag==true) return 1;
    return 0;
}

int main(void) {
    
    for(int tc=1; tc<=10; tc++){
        
        // 입력
        int len;
        cin>>len;
        len--;
        string str;
        for(int r=0; r < 8; r++){
            cin>>str;
            for(int c=0; c< 8; c++){
                board[r][c] = str[c];
            }
        }
        
        // 연산
        if(len==0){
            cout << '#' << tc << " 64" << endl;
            continue;
        }else if(len > 7){
            cout << '#' << tc << " 0" << endl;
            continue;
        }
        
        int answer =0;
        for(int r=0; r<8; r++){
            for(int c=0; c<8; c++){
                
                // 가로 체크
                if(c < (8-len)){
                    if(checkPalindrome_row(r,c,len)==1) answer++;
                }
                
                // 세로 체크
                if(r < (8-len)){
                    if(checkPalindrome_column(r, c, len)==1) answer++;
                }
            }
        }
        cout << '#' << tc << ' ' << answer << endl;
    }
    return 0;
}
반응형