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