본문 바로가기

알고리즘/백준

1259. 팰린드롬수

반응형





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include "bits/stdc++.h"
 
using namespace std;
 
bool isPalin(vector<int> nums) {
    int size = nums.size();
    
    for(int i = 0; i < size / 2; i++) {
        if(nums[i] != nums[size - i - 1]) return false;
    }
    return true;
}
 
int main() {
    int n;
    
    while(1) {
        scanf("%d"&n);
        if(n == 0break;
        
        vector<int> v;
        
        while(n > 0) {
            v.push_back(n % 10);
            n /= 10;
        }
        
        if(isPalin(v)) printf("yes\n");
        else printf("no\n");
    }
    return 0;
}
cs


이 문제는 숫자가 하나 주어졌을 때 그 숫자가 팰린드롬 수 인지 판별하는 문제이다.

팰린드롬은 위에서 설명되있는 것과 같이 뒤집었을때 같은 모양을 하고 있는 것을 말한다.


이를 풀기위해서는 주어진 수를 받아서 하나하나 배열에 저장을 해야한다. 그래서 vector를 이용해서 받아온 정수를 10으로 나눠주며 그의 나머지를 v라는 배열에 저장해주고 있다. 그 이후는 isPalin이라는 함수에 이것이 팰린드롬 수인지 여부를 알기 위해서 넘겨준다.


isPalind에서 하는 일은 지금 받은 배열의 크기를 측정해서 크기의 절반만큼 반복하며 배열을 반으로 짤랐을때 왼쪽부분과 오른쪽 부분을 비교하는 것이다. 비교하는 도중 같지 않은 수가 나왔다면 false를 리턴하고 함수를 종료한다. 하지만 무사히 비교하는 과정을 마쳤다면 이 수가 팰린드롬 수이므로 true를 리턴한다.


이를 이용하여 true가 반환되면 yes를 출력, 아니면 no를 출력한다.


'알고리즘 > 백준' 카테고리의 다른 글

[백준] 13460번 구슬 탈출2  (0) 2019.10.03
7576. 토마토  (0) 2018.11.15
1181. 단어 정렬  (0) 2018.10.29
2751번 수 정렬하기2  (0) 2018.10.11
2750번 수 정렬하기  (0) 2018.10.11