1. 문제 상세
https://www.acmicpc.net/problem/10988
2. 문제 접근
단어가 팰린드롬인지 확인하자.
단어의 양쪽 끝에서부터 가운데로 가면서 양쪽의 문자를 비교하여 같은지 확인하자.
문자열에서 인덱스를 참조하여, 맨 앞의 인덱스를 i, 마지막 문자의 인덱스를 j 라고 할 때, i, j 를 비교하고
그 다음 i + 1, j - 1 을 비교하는 식으로 i 에는 1을 더해가고, j 에는 1을 빼가며 가운데 문자의 인덱스까지 시행하자.
가운데 문자에 도달했는지 확인하기 위해 i 가 j 보다 작거나 같을 때만 문자를 비교하도록 하자.
3. 문제 풀이
#include <iostream>
using namespace std;
int main() {
int i, j;
string s;
cin >> s;
for(i = 0, j = s.length() - 1; i <= j; i++, j--) {
if(s[i] != s[j]) {
cout << "0";
return 0;
}
}
cout << "1";
return 0;
}
정수형 변수 i, j 를 선언, 문자열 객체 s 를 생성한다.
cin 으로 문자열을 입력받아 s 에 저장한다.
for문으로 i 는 0부터, j 는 s 의 길이에서 1을 뺀 값(마지막 문자 인덱스를 찾기 위해 문자의 길이 - 1)부터 시작하여i 가 j 보다 작거나 같을 때 i 에는 1씩 더하고, j 는 1씩 빼며 반복하도록 한다.반복문 내에서는 if문으로 s 의 i 번 인덱스의 값(i + 1번째 문자)와 j 번 인덱스의 값(j + 1번째 문자)가 다르다면0을 출력하고 프로그램을 종료한다.
반복문이 끝나면 1을 출력한다.(반복하며 비교하는 동안 문자가 계속 같았던 경우 팰린드롬이므로)
4. 성능 확인
5. 마무리
.
'백준 - 단계별로 풀어보기 > 심화 1' 카테고리의 다른 글
[백준] 2941번 : 크로아티아 알파벳 | C++ (0) | 2023.10.11 |
---|---|
[백준] 1157번 : 단어 공부 | C++ (1) | 2023.10.11 |
[백준] 2444번 : 별 찍기 - 7 | C++ (0) | 2023.09.26 |
[백준] 3003번 : 킹, 퀸, 룩, 비숍, 나이트, 폰 | C++ (0) | 2023.09.26 |
[백준] 25083번 : 새싹 | C++ (0) | 2023.09.26 |