[문제보기]

 [S/W 문제해결 기본] 3일차 - 회문1

 

SW Expert Academy

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

swexpertacademy.com

 

[풀이과정]

1. main

 (1) 입력값을 string 형태로 한 줄씩 받아서 map[8][8]에 넣어준다.

 (2) n이 1이면 즉, 회문의 길이가 1이면 8*8 = 64를 바로 반환해준다.

 

2. palindrome()

 - 첫번째 for문

  (1) string형인 temp[2]를 만들어서 temp[0]은 아래로, temp[1]은 오른쪽의 데이터를

      n크기만큼 넣어준다. 이때 평면 글자판에서 벗어나는 크기들은 제외!!

       *temp 배열을 2개만 만들어준 이유는 밑에 [해결과정 중 실수한 부분]에서 설명

 - 두번째 for문

  (1) 주어진 회문의 길이만큼 저장된 temp들을 비교해줄건데, flag를 사용해 회문이 아닌 경우 break하고,

       if문의 그냥 넘긴다.

  (2) 안의 for문에서 start와 end의 변수로 회문을 검사해줄건데, start은 앞에서 end는 뒤에서 오면서 비교를

       해주고, end가 start보다 작아지면 for문을 그만두면서 ans의 값을 하나 증가해준다.

 

[소스코드]

#include <iostream>
using namespace std;
char map[8][8];
int n;
int ans;

void palindrome(int y, int x){
    string temp[2];
    
    for(int i=0; i<n; i++){
        if(y+i < 8)
            temp[0] += map[y+i][x];

        if(x+i < 8)
            temp[1] += map[y][x+i];
    }

    bool flag;
    for(int i=0; i<2; i++){
        flag = true;
        if(temp[i].size() == n){
            for(int start=0, end=n-1; end >= start; start++,end--){
                if(temp[i][start] != temp[i][end]){
                    flag = false;
                    break;
                }
            }

            if(flag)
                ans++;
        }
    }

}

int main(){
    cin.tie(0);
    cout.sync_with_stdio(false);

    for(int test = 1; test <= 10; test++){
        cin >> n;
        ans = 0;
        string s;
        for(int i=0; i< 8; i++){
            cin >> s;
            for(int j=0; j<8; j++){
                map[i][j] = s[j];
            }
        }

        if(n == 1){
            ans = 64;
        }
        else{
            for(int i=0; i<8; i++){
                for(int j=0; j<8; j++){
                    palindrome(i,j);
                }
            }
        }

        cout << "#" << test << " " << ans << "\n";

    }
}

 

[해결 과정 중 실수한 부분]

 처음에는 temp 배열을 4개를 만들어서 했는데, 계속 답보다 높은 숫자들이 나왔다.

 이유는 중복으로 인한 오류!! -> 예를 들어, map[0][0]에서 밑으로 temp에 입력한 값과 map[n][0]에서

 위로 temp에 입력한 값이 같은 회문 따라서 temp를 두 개만 만들어줘서 아래, 오른쪽에 있는 데이터로 검사

 

 알고리즘은 다 짜놓고 한.. 10분은 소비한 것 같다ㅠㅠ