언어/C++

[백준10988/c++] 팰린드롬인지 확인하기

연나연 2023. 11. 11. 22:10

해당 문제는 string만 잘 사용할줄 알면 쉽게 풀 수 있는 문제이다.

 

string 사용법/ 문자열 다루기

string 클래스의 장점
(1) 문자 끝에 null('/0') 등이 포함되지 않는다.
(2) 문자열의 길이를 신경쓸 필요가 없다. 
(3) 객체로써 블록이 끝나는 시점에 소멸자가 호출되어 메모리 릭을 걱정할 필요가 없다.
(4) 마치 배열처럼 한 문자씩 다룰 수 있다.
(5) 연산자 오버로딩이 되어 있어 연산자들로 다양한 문자열 연산이 가능하다. 
(6) string 클래스의 다양한 메소드를 통해 문자열 가공이 쉽다.

위 장점 중 (3), (5)는 잘 모르겠지만 

(4) (6) 같은 장점 덕분에 해당 문제에서 유용하게 사용할 수 있다.

 

 

▼string 사용법 다음과 같다

string 선언
#include <string> //string 클래스 포함 헤더
#include <iostream> //iostream안에 string헤더가 포함되어있음
cout << str[4] << endl; //문자열[index]: 배열처럼 index의 위치의 문자를 반환
cout << str.front() << endl; //문자열 맨 앞의 문자를 반환
cout << str.back() << endl; //문자열 맨 끝의 문자를 반환

cout << str.length() << endl; //문자열의 길이를 반환
cout << str.size() << endl; //문자열이 사용하고 있는 Size를 반환
cout << str.capacity() << endl; //문자열에 할당된 메모리 크기 반환

(사실 여기서 length와 size의 차이를 잘 모르겠음..다음에 포스팅하도록 할게요 ㅎㅎ)

string 가공함수
str.clear(); //문자열 초기화
str.erase(); //문자열 전체 지우기
str.erase(5); //earse(n): 문자열 index n까지 지우기

str.push_back('문자'); //문자열 맨 뒤에 '문자'를 추가
str.pop_back(); //문자열 맨 끝 문자 제거

 

▼내가 사용한 코드는 다음과 같다

#include <iostream>

using namespace std;

int main()
{
    string IS_palindrome;
    int palindrome =1;
    cin >> IS_palindrome;
    for (int i = 0; i <= IS_palindrome.size() / 2; i++) {
        if (IS_palindrome[i] == IS_palindrome.back()) {
            IS_palindrome.pop_back();
        }
        else {
            palindrome = 0;
            break;
        }
    }
    cout << palindrome;
}