개발/코딩 테스트

[C++] 백준 10988번 팰린드롬인지 확인하기

쨈밍 2023. 7. 29. 02:25

<문제>

https://www.acmicpc.net/problem/10988

 

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

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

www.acmicpc.net


<해결 방법>

팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.

 

그래서 단어를 string으로 입력 받아와서 서로 대칭되는 배열 인덱스에 접근하여 두 문자가 동일한 지 확인해줬다.

 

쉽게 말하면,, string은 다음과 같이 표현할 수 있다.

1) 받아온 문자열 : level

index 0 1 2 3 4
s[index] l e v e l
  ↑  left       right  ↑

 

2) 받아온 문자열 : baekjoon

index 0 1 2 3 4 5 6 7
s[index] b a e k j o o n
  ↑  left             right  ↑

 

1. s[left]와 s[right]가 서로 동일한 문자다. -> left = left + 1 / right = right - 1

2. s[left]와 s[right]가 서로 동일하지 않다. -> 결과 : 팰린드롬 아님. 반복문 즉시 종료.

3. 단어가 팰린드롬 단어여서 계속해서 1번 과정을 거치다 보면 left가 right보다 커지는 순간이 오고, right가 left보다 작아지는 순간이 온다. 그 순간이 오게 되면 결과 : 팰린드롬. 반복문 종료.


예시 1 : level

단계 1 : 

index 0 1 2 3 4
s[index] l e v e l
  ↑  left       right  ↑

s[left] == s[right]이므로 left = left + 1 / right = right - 1

 

 

단계 2 : 

index 0 1 2 3 4
s[index] l e v e l
    ↑  left   right  ↑  

s[left] == s[right]이므로 left = left + 1 / right = right - 1

 

 

단계 3 : 

index 0 1 2 3 4
s[index] l e v e l
      ↑  left, right    

level은 5자이기 때문에 left, right가 동시에 만난다. 그래서 s[left]와 s[right] 다를 수가 없기 때문에 우리는 이 단어를 팰린드롬으로 보고 결과를 true로 설정해준다.


예시 2 : baekjoon

단계 1 : 

index 0 1 2 3 4 5 6 7
s[index] b a e k j o o n
  ↑  left             right  ↑

s[left]는 b이고, s[right]는 n이므로, 처음부터 같지 않기 때문에 결과는 false로 설정해주고, 반복문 즉시 종료.

 

자세한 건 코드로 보자.


<코드>

#include <iostream>
#include <string>
using namespace std;

int main() {
    int result = 0, left, right;
    string s;

//판별할 문자열 입력 받음
    cin >> s;

    left = 0;
    right = s.size() - 1;

//판별 시작
    while (1) {
    	//3번 경우
        if (left >= right) {
            result = 1;
            break;
        }
    	//2번 경우
        else if (s[left] != s[right]) {
            result = 0;
            break;
        }
    	//1번 경우
        else {
            left++;
            right--;
        }
    }

    cout << result;

    return 0;
}

흐름을 잘 모르겠으면 비주얼 스튜디오를 설치해서 단계별로 실행으로 흐름을 보면 좋을 것 같다.

비주얼 스튜디오로 단계별로 실행하는 방법도 추후에 포스팅해야겠다.


<결과>