[C++] 백준 1259 : 팰린드롬수

Kim Nahyeong·2022년 1월 8일
0

백준

목록 보기
47/157

#include <iostream>
using namespace std;

int main(int argc, char **argv){
    string str;
    char c;
    // 굳이 반복문 쓰지 말고 reverse() 써서 문자열 비교하기
    do{
        cin >> str;
        if(str == "0"){
            return 0;
        }
        if(str.length() % 2 == 0){ // 1221 팰린드롬
            for(int i = 0; i < str.length(); i++){
                c = str[i];
                if(c != str[str.length() - i - 1]){
                    printf("no\n");
                    break;
                }
                if(i == (str.length() / 2 - 1)){
                    printf("yes\n");
                    break;
                }
            }
        } else {
            for(int i = 0; i < str.length(); i++){
                c = str[i];
                if(c != str[str.length() - i - 1]){
                    printf("no\n");
                    break;
                }
                if(i == (str.length() / 2)){
                    printf("yes\n");
                    break;
                }
            }
        }
    } while(str != "0");

    return 0;
}

오늘의 키포인트

  • 어마어마한 반복문을 써서 문제를 풀었다ㅜㅜ 하지만 STL algorithm 헤더에 선언된 reverse() 함수를 쓰면 문자열을 역으로 만들어준다고 한다... 그걸 쓰면 훨씬 쉬웠을텐데 ㅠㅠ
#include <iostream>
#include <algorithm> 

using namespace std;

int main() {
	string input;
	while(input != "0") {
		cin >> input;
		string buf = input; //reverse 하기 전 값을 저장 
		reverse(input.begin(), input.end()); // input문자열을 reverse 
		if(input != "0") {
			if(input == buf) cout << "yes\n";
			else cout << "no\n";
		}
	}
	
	return 0;
}

다른 분은 이런식으로 작성하셨더라. 딱 봐도 훨씬 쉬워보인다.

0개의 댓글