백준 10988, 문자열 뒤집기, reverse()

https://www.inflearn.com/course/10%EC%A3%BC%EC%99%84%EC%84%B1-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8-%ED%81%B0%EB%8F%8C/dashboard

 

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트 - 인프런 | 강의

네이버, 카카오, 삼성의 코딩테스트를 10주만에 합격시킨 최고의 코딩테스트 강의!, 코딩테스트, 이제 검증된 10주 완성 커리큘럼으로 정복하자!😎 [사진] 코딩테스트 강의어떤 것을 골라야 할까

www.inflearn.com

https://www.acmicpc.net/problem/10988

 

10988번: 팰린드롬인지 확인하기

첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.

www.acmicpc.net

문자열을 입력받은 뒤, 문자를 거꾸로 했을 때 일치하는지 구하는 문제이다. 사실 거꾸로 해서 같은지 확인하면 되기 때문에 이미 문제에서 힌트를 다 제공한 것이나 다름없다. 따라서 문자열을 뒤집는 함수인 reverse()를 사용하면 금방 해결되는 문제이다. 하지만 나는 이러한 함수를 사용할 생각을 안하고 문자에 어떻게 접근해서 비교를 해야 할지를 고민했었다.

 

물론 문제가 해결되기는 했지만 reverse()라는 함수를 사용할 생각을 했다면 좀 더 빠르게 해결할 수 있었을 것이다. 알고리즘 문제에는 다양한 방법들이 있기는 하지만 보다 깔끔하고 간결한 코드가 코딩테스트 환경에서도 보다 유리할 것이다.

// 나의 풀이

#include<bits/stdc++.h>
using namespace std;

string input;
int ret = 1;

int main(){
	cin >> input;
	
	int num = input.length();
	
	for(int i = 0; i < num/2; i++){
		if(input[i] != input[num-i-1]) {
			ret = 0;
			break;
		}
	}
	cout << ret;
	return 0;
}
// 강의 풀이

#include<bits/stdc++.h>
using namespace std;

string s, temp;

int main(){

	cin >> s;
	temp = s;
	reverse(temp.begin(), temp.end());
	if(temp == s) cout << 1 << "\n";
	else cout << 0 << "\n";
	
			
	return 0;
}

내가 강의를 들으면서 차이를 느꼈던 점은 강사님은 보다 직관적으로 코드를 짠다는 것이다. 문자열을 거꾸로 해도 동일하다는 점을 활용해 실제 문자열을 뒤집는 방법을 선택한 것이다.