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

 

1259번: 팰린드롬수

문제 어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. 'radar', 'sees'는 팰린드롬이다. 수도 팰린드롬으로 취급할 수 있다. 수의 숫자들을 뒤에서부터 읽어도 같다면 그 ��

www.acmicpc.net

 

앞, 뒤 어디로 읽어도 똑같이 읽히는 수를 팰린드롬수라고 한다.

 

위 문제를 해결한 나의 방식은 다음과 같다.

#include<iostream>
#include<string>
#include<vector> 
#define TRUE 1

using namespace std;

int main()
{
int size;
int correct = 0;
string str;
vector front;
vector back;

while (TRUE) {
    getline(cin, str);
    size = str.length();
    //cout << "size : " << size << endl;
    //cout << "size / 2 : " << size / 2<< endl;

    if (str[0] == '0') {
        break;
    }

    else {
        // 중간에서 앞의 부분 벡터에 넣기
        for (int i = 0; i < size / 2; i++) {
            front.push_back(str[i]);
        }

        // 중간에서 뒤의 부분 벡터에 넣기

        if (size % 2 == 0) { //size가 짝수일 때
            for (int i = size - 1; i > size / 2 - 1; i--) {
                back.push_back((int)str[i]);
            }
        }

        else { //size가 홀 수 일 떄
            for (int i = size - 1; i > size / 2; i--) {
                back.push_back((int)str[i]);
            }
        }

        // front, back 두 개 벡터 비교하기
        for (int i = 0; i < size / 2; i++) {
            if (front[i] == back[i]) {
                correct++;
            }
        }

        if (correct == size / 2) {
            //cout << "correct : " << correct << endl;
            printf("yes\n");
        }
        else {
            //cout << "correct : " << correct << endl;
            printf("no\n");
        }
        correct = 0;
        front.clear();
        back.clear();
    }
}

system("pause");
return 0;

string으로 입력받아, 비교할 수들을 front, back vector에 각각 넣고 비교하는 코드이다.

 

그러나 너무 코드가 지저분해서 다른 분의 해결방법을 보고, 새로 구현해보았다.

#include <iostream>
#include <string>
#define TRUE 1
#define FALSE 0

using namespace std;

int main()
{
	string str;
	
	while (TRUE) {
		int correct = TRUE;
		getline(cin, str);

		if (str[0] == '0') break;

		int size = str.size();

		for (int i = 0; i < size / 2; i++) {
			if (str[i] != str[size - i - 1]) {
				correct = FALSE;
				break;
			}
		}

		if (correct == TRUE) {
			printf("yes\n");
		}
		else {
			printf("no\n");
		}
	}

	system("pause");
	return 0;
}

vector에 넣는 과정없이 바로, 비교해서 값을 낼 수 있다. 훨씬 깔끔해졌다.

행복 ㅎㅎ

'역시 내 문제해결 알고리즘은 잘못됐다' 카테고리의 다른 글

백준 1152번 C/C++  (0) 2020.12.30
백준 2884번 C/C++  (0) 2020.12.30
백준 2750번 C/C++  (0) 2020.08.07
백준 11721번 C/C++  (0) 2020.07.15
백준 10951번  (0) 2020.07.13