백준 10988번: 팰린드롬인지 확인하기 / C++ 문제풀이

Been·2023년 11월 12일
0

백준

목록 보기
12/23
post-thumbnail

한 줄 요약 :

문자열의 길이/2의 몫이 대칭되는 문자쌍의 개수와 같다면 팰린드롬이다.

풀이 :

1. 문자열 char word[101]을 받는다.

이 때 문자열의 크기는 100자보다 작거나 같으므로 null문자를 포함한 [101]칸을 받는다.

char word[101];
	cin >> word;

2. 문자열의 길이를 측정한다.

포인터가 가리키는 문자열의 위치가 0이 아닐때까지 int length의 값을 1씩 더해주며 포인터를 한 칸씩 옮겼다.

char* ptr = word;
	int length = 0;
	while (ptr[length] != 0)
	{
		length++;
	}

3. 대칭이 되는 문자열을 측정한다.

포인터를 시작지점과 끝지점에서 출발하여 한칸씩 비교한다.
서로 같은 문자열일 경우 int count의 값을 1씩 추가한다.
(팰린드롬은 count의 값이 문자열 길이를 2로 나눈 몫의 값이 되어야한다.)
이 때 length-1을 하는 이유는 앞서 ptr[length]의 값이 0이 될 때까지 length에 1을 더했기 때문이다.

int count = 0;
int i = 0;
while (i < (length - 1 - i))
{
	if (ptr[i] == ptr[length-1-i]) 
	{
		count++;
	}
	i++;
}

4. 팰린드롬일 경우 1(true)을 출력하고, 아닐 경우 2(false)를 출력한다.

앞서 말했듯, 문자열의 길이 length/2의 몫이 count일 경우 팰린드롬이다.

	if (length / 2 == count)
		cout << true;
	else
		cout << false;

<C++ Code>

#include <iostream>
using namespace std;

int main()
{
	char word[101];
	cin >> word;

	char* ptr = word;
	int length = 0;
	while (ptr[length] != 0)
	{
		length++;
	}

	int count = 0;
	int i = 0;
	while (i < (length - 1 - i))
	{
		if (ptr[i] == ptr[length-1-i])
		{
			count++;
		}

		i++;
	}

	if (length / 2 == count)
		cout << true;

	else
		cout << false;
}
profile
콧콧코코콧코콧ㅅ

0개의 댓글