https://www.acmicpc.net/problem/10988
10988번: 팰린드롬인지 확인하기
첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.
www.acmicpc.net
풀이
#include <iostream>
#include <string>
using namespace std;
int main()
{
string n;
cin >> n;
string m = n;
char tmp;
for (int i = 0; i < n.length() / 2; i++)
{
tmp = n[i];
n[i] = n[n.length() - 1 - i];
n[n.length() - 1 - i] = tmp;
}
if (m == n)
{
cout << "1" << endl;
}
else
cout << "0" << endl;
return 0;
}
먼저 제가 푼 풀이입니다.
다른 분들도 이런 풀이로 풀었을 것으로 생각이 듭니다. 하지만 제 식이 조금 더 복잡하고 편의성이 좋지는 않을 것으로 보입니다.
알고리즘
1. 입력받을 n의 값을 넣어주는 cin을 만든 후 나중에 비교하기 위해 string m에 n을 넣어준다.
문제에 입력값인 n을 넣어주는 것을 넣어준 다음에 문자를 거꾸로 변환해주는 for문을 통해 처음에 n과 나중의 n이 같은지 다른지를 판별해주기 위한 코드입니다.
string n;
cin >> n;
string m = n;
2. for문을 통해 입력받은 n을 거꾸로 변환해준다.
변환하는 과정은 n.length() 함수를 이용합니다. 첫번째 문자와 마지막 문자, 두번째 문자와 마지막에서 두번째의 문자... 이런식으로 비교해가면 되기 때문에 n.length() -1이 마지막이기 때문에 그것을 i와 잘 이용해줘서 풀어줍니다. 교환하는 방식은 tmp를 넣고서 n[i] 와 n[n.length() -1 - i]와 교환해줍니다.
char tmp;
for (int i = 0; i < n.length() / 2; i++)
{
tmp = n[i];
n[i] = n[n.length() - 1 - i];
n[n.length() - 1 - i] = tmp;
}
3. if문으로 같은지 판단 후 출력
if문을 통해 같은지 확인 후 같으면 1을 아니면 0을 출력해줍니다.
if (m == n)
{
cout << "1" << endl;
}
else
cout << "0" << endl;
다른 풀이
#include<iostream>
using namespace std;
int main()
{
string input;
cin >> input;
for (int i = 0; i < input.length() / 2; ++i)
{
if (input[i] != input[input.length() - 1 - i])
{
cout << 0;
return 0;
}
}
cout << 1;
}
더 간단한 풀이입니다. 이런 식으로 for문에 넣어주는 식은 비슷하지만 for문 안에 if를 넣어주면서 input[i] 와 input[input.length() -1 -i] 사이에 한번이라도 같이 않은 경우가 있으면 0으로 하고 return 0을 해주면서 끝내주는 코드를 만들었습니다.
for문을 벗어나는 경우 모든 for문이 같다는 것을 의미하며 이는 팰린드롬 단어이므로 1이 출력이 됩니다.
'IT 프로그래밍 > 백준' 카테고리의 다른 글
[C++] 백준 1009번 분산처리 (0) | 2024.03.31 |
---|---|
[C++] 백준 1157번 단어 공부 (0) | 2024.03.30 |
[C++] 백준 2440번 별 찍기 -3 (0) | 2024.03.27 |
[C++] 2444 별찍기 7 (0) | 2024.03.27 |
[C++] 백준 11718번 그대로 출력하기 (0) | 2024.03.25 |