https://www.acmicpc.net/problem/1259
앞, 뒤 어디로 읽어도 똑같이 읽히는 수를 팰린드롬수라고 한다.
위 문제를 해결한 나의 방식은 다음과 같다.
#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 |