본문으로 바로가기

문제 출처 : https://www.acmicpc.net/problem/10988

 

10988번: 팰린드롬인지 확인하기

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

www.acmicpc.net

고려사항

- 단어의 앞 글자 인덱스가 0이고, 단어의 길을 len, len/2를 mid라 할 때 (소숫점 이하는 형변환에 의해 버려짐)

  단어의 길이가 홀수 일 땐, (0,len-1), (1,len-2),....(mid-1,mid+1)만 비교하고 mid의 철자는 비교 페어가 없어 내버려둔다.

  단어의 길이가 짝수 일 땐, (0,len-1), (1,len-2),....(mid-1,mid)를 하면 모든 대칭 철자 비교가 완료 된다.

  따라서 비교 반복문의 범위를 0 <= i < mid 까지 설정해주면 된다.

 

- 철자 검사 반복문에서 철자가 대칭이 아닐 시 반복문을 break으로 빠져나오고 answer=0 이기 때문에

   answer의 초기값은 1이 되어야 한다.

 

#include <iostream>
#include <string>

using namespace std;
int main() {
    string word;
    cin>>word;
    int len = word.length();
    int mid = len / 2; // mid엔 정수형으로 저장이 되기 때문에
    // 단어 길이가 홀수든 짝수든 대칭 비교가 가능하다.
    int answer = 1; // 단어 철자 비교시 같지 않음이 판명나면
    // answer에 0을 저장후 break하기 때문에 초기값은 1

    for(int i=0;i<mid;++i){
        if(word[i] != word[len-1-i]){ // 중간을 기준으로 대칭 지점에 있는 철자와 다르면
            answer = 0; // 팰린드롬이 아니다.
            break;
        }
    }
    cout<<answer;
    return 0;
}

'BOJ 백준 > 문자열' 카테고리의 다른 글

백준 09935 - 문자열 폭발  (0) 2020.11.12
백준 05670 - 휴대폰 자판  (0) 2020.11.07
백준 14425 - 문자열 집합  (0) 2020.11.07
백준 10545 - 뚜기뚜기메뚜기  (0) 2020.01.04