728x90
팰린드롬인지 확인하기
시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1 초 | 256 MB | 19483 | 12940 | 11122 | 67.792% |
문제
알파벳 소문자로만 이루어진 단어가 주어진다. 이때, 이 단어가 팰린드롬인지 아닌지 확인하는 프로그램을 작성하시오.
팰린드롬이란 앞으로 읽을 때와 거꾸로 읽을 때 똑같은 단어를 말한다.
level, noon은 팰린드롬이고, baekjoon, online, judge는 팰린드롬이 아니다.
입력
첫째 줄에 단어가 주어진다. 단어의 길이는 1보다 크거나 같고, 100보다 작거나 같으며, 알파벳 소문자로만 이루어져 있다.
출력
첫째 줄에 팰린드롬이면 1, 아니면 0을 출력한다.
예제 입력 1 복사
level
예제 출력 1 복사
1
예제 입력 2 복사
baekjoon
예제 출력 2 복사
0
흐름
유의할 점
- 글자수가 짝수일때와 홀수일때 비교 방법이 다르다.(짝수는 가운데 index에서 빼주는 방식, 홀수는 비교 인덱스끼리의 합이 글자길이-1을 사용하는 방식)
테스트 케이스 외의 반례를 생각하자
풀이코드
#include <bits/stdc++.h>
using namespace std;
string str;
int mid; //중간 인덱스
int s; //글자 크기
int main(){
//1. 글자를 입력받는다.
cin >> str;
//2. 문자를 쪼개서 비교한다.
s= str.length();
mid = s/2;
//2-1. 홀수 글자이면
if(s%2==1){
for(int i=1;i<=mid;i++){
if(str[mid-i]==str[mid+i]) continue; //같으면 계속하기
else { //같지 않으면 0 출력후 종료
cout << 0;
return 0;
}
}
cout << 1;
}
//2-2. 짝수 글자이면
else{
for(int i=0;i<mid;i++){
if(str[i] == str[s-i-1]) continue; //같으면 계속하기
else{ //그렇지 않으면 0 출력 후 종료
cout << 0;
return 0;
}
}
cout << 1;
return 0;
}
}
맞았다. 👍
선생님 코드
#include <bits/stdc++.h>
using namespace std;
string s, temp;
int main(){
//1. 입력
cin >> s;
//2. 거꾸로 만든 문자열과 입력 문자열이 같으면 회문
temp = s;
reverse(temp.begin(), temp.end()); //temp의 문자열을 거꾸로(원본 배열 바꿈)
if(temp==s) cout << 1 << "\n";
else cout << 0 << "\n";
return 0;
}
포인트
- 문제를 볼때 입력이 글자라고해도 그림으로 도식화하여 파악하면 좋다.
- 회문(똑바로 읽어도, 거꾸로 읽어도 같은 문자)는 reverse 함수를 이용하여 판단한다.
회문 여부는 reverse함수로 판별
728x90
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
11655번: ROT13 (0) | 2022.12.31 |
---|---|
1159번: 농구 경기 (2) | 2022.12.31 |
2979:트럭 주차 (1) | 2022.12.31 |
10808: 알파벳 개수 (0) | 2022.12.30 |
2309: 일곱 난쟁이 (0) | 2022.12.29 |