반응형
회문 = 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; }
반응형