본문 바로가기
자료구조와 알고리즘/[Inflearn_큰돌] 10주 완성 C++ 코딩테스트

1주차-2. 10988번 팰린드롬인지 확인하기

by 헛둘이 2022. 9. 13.
10988번 팰린드롬 문제

문제의 요지는 단순하게 주어진 문장이 팰린드롬인지 확인하는 문제였다.
단어의 길이가 주어져서 배열의 사이즈를 가늠할 수 있다.

 

 

 

 

 


먼저 무작정 풀어보기

 

#include <iostream>

using namespace std;

int main()
{
	char chArr[101];

	cin >> chArr;

	size_t length = 0;

	char* p = chArr;
	while (*p != '\0')
	{
		length++;
		p++;
	}

	for (int i = 0; i < length / 2; i++)
	{
		if (chArr[i] != chArr[length - i - 1])
		{
			cout << 0 << endl;
			return 0;
		}
	}

	cout << 1 << endl;
	return 0;
}
  • 예전에 이런 비슷한 류의 문제를 본 적이 있었는지 바로 해결책이 떠올랐고 그래서 생각보다 쉽게 풀었다.
  • length 변수에 받아온 문장의 길이를 저장하고,
  • 그 길이를 토대로 for문을 돌려 배열의 첫 요소와 마지막 요소를 비교하는 식으로 풀었다.
  • 아마 가장 흔한 풀이가 아닐까 싶다.

 

아래 컴파일 에러는 strlen을 string.h없이 사용하려다가 에러가 났다..ㅠㅠ 문자열 개수 세는 코드는 연습할 겸 그냥 내가 짰다..

 

 

 

 


큰돌님의 풀이
  • 팰린드롬은 회문이라고도 하고 거꾸로 읽으나 그대로 읽으나 같기 때문에
  • 뒤집은 문자와 비교하면 된다. 
#include <iostream>

using namespace std;

int main()
{
	string s, temp;
	
	cin >> s;

	temp = s;
	reverse(begin(s), end(s));

	if (s == temp) cout << 1 << endl;
	else cout << 0 << endl;
}
  • 와...간결해도 너무 간결하다.

 

물론 짧은 코드라고 무조건 좋은 코드라고 볼 순 없겠지만.
이 코드의 경우 가독성까지 잡았기 때문에 내가 짠 코드보다 더 좋다고 생각한다.

댓글