** 이 글을 읽음에 앞서 포스팅 된 소스가 100% 정답은 아님을 밝힙니다.
더욱 유능한 분께서 클린 / 최적의 소스를 짜셨을 가능성이 높습니다.
기록용으로 남기며, 참고만 부탁드립니다.
** 백준 알고리즘은 직접 풀이를 해보시는 것을 권장합니다.
● 문제
난이도[티어] : 브론즈 1
백준 알고리즘 1259번 팰린드롬수
https://www.acmicpc.net/problem/1259
● 풀이 방법
간단하게 생각하면 금방 풀 수 있는 문제이다.
분기점을 기준으로 대칭이 이루어져있는지 확인하면 되지만, 이보다 더 쉬운 방법이 존재한다.
● 소스 코드
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
int main()
{
while(1){
string str, str_rev;
cin >> str;
if(str=="0")
break;
str_rev = str;
reverse(str_rev.begin(), str_rev.end());
if(str.compare(str_rev))
cout << "no" << endl;
else
cout << "yes" << endl;
}
}
우리는 대칭을 이루는 것을 찾아야 한다.
분기점을 설정하여 비교를 해도 되지만, 대칭이 이루어져 있다는 것은, 즉 팰린드롬수는
거꾸로 뒤집어도 뒤집지 않는 값과 같은지 비교해도 구별이 가능하다.
사용한 함수
#include<algorithm> : reverse()
#include <algorithm>
template <class BidirectionalIterator>
void reverse (BidirectionalIterator first, BidirectionalIterator last);
참조 : https://cplusplus.com/reference/algorithm/reverse/
#include <string> : str1.compare(str2)
#include <string>
//string
int compare (const string& str) const noexcept;
//substrings
int compare (size_t pos, size_t len, const string& str) const;
int compare (size_t pos, size_t len, const string& str,size_t subpos, size_t sublen = npos) const;
//c-string
int compare (const char* s) const;int compare (size_t pos, size_t len, const char* s) const;
//buffer
int compare (size_t pos, size_t len, const char* s, size_t n) const;
참조 : https://cplusplus.com/reference/string/string/compare/
● 결과
** 코드 길이가 상이 할 수 있습니다! 그러나 내용물은 같습니다.
이유) 주석 및 더미 소스 유무
'백준 알고리즘 > C++17' 카테고리의 다른 글
[백준 | C/C++] 1157번 문제 풀이 : 단어 공부 (1) | 2024.04.20 |
---|