IT 프로그래밍/백준

[C++] 백준 10988번 팰린드롬인지 확인하기

기술1 2024. 3. 29. 17:24

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