본문 바로가기
IT/BOJ

백준(BOJ) 4096 팰린드로미터 **

by 빨강자몽 2018. 6. 1.

팰린드롬 문제를 살짝 응용한 문제이다.
중간중간에 수 연산과정에 생기는 오류를 조심하자

팰린드롬을 간단하게 설명하면
숫자가 좌우 대칭인 숫자를 말한다.
예를들어 121 1221 10001등 좌우대칭인 수를 의미한다.


#include <iostream>
#include <algorithm>
#include <vector>
#include <string.h>
#include <math.h>
#include <queue>
#include <set>
#include <utility>
#include <functional>
#define MAX 100005
#define INF 987654321
#define MOD 1000000007
#pragma warning(disable:4996)
using namespace std;

int n;
char str[10];

int fun(int cur)
{
    int tmp=0;
    if(str[cur-1]>=str[strlen(str)-cur])
        tmp=str[cur-1]-str[strlen(str)-cur];
    // 앞의 검사하려는자리가 뒤의 검사하려는 자리보다 큰경우.
    else
    {
        int times=1;
        while(1)
        {
            if(str[strlen(str)-cur-times]=='9')
            {
                str[strlen(str)-cur-times]='0';
                times++;
            }
            else
            {
                str[strlen(str)-cur-times]+=1;
                break;
            }
        }
        tmp=str[cur-1]-str[strlen(str)-cur]+10;
        // 올림 된 크기를 tmp에 저장해주고 자리수 연산을 실시해준다.
    }
    str[strlen(str)-cur]=str[cur-1];
    if(cur==strlen(str)/2)
        return tmp*(int)pow(10,cur-1);
    // 6자리(짝수)일때 3번 5자리(홀수)일대 2번검사 해준다.
    
    return tmp*(int)pow(10,cur-1)+fun(cur+1);
    // 재귀로 계속해서 더해준다.
}

int main()
{
    scanf("%s",str);
    while(!(strlen(str)==1&&str[0]=='0'))
    // 0이 아닌경우에 반복시킨다.
    {
        printf("%d\n",fun(1));
        scanf("%s",str);
    }
    return 0;
}


'IT > BOJ' 카테고리의 다른 글

백준(BOJ) 2470번 두 용액 **  (0) 2018.06.01
백준(BOJ) 10610 30 *  (0) 2018.06.01
백준(BOJ) 14502번 연구소 *  (0) 2018.06.01
백준(BOJ) 2931 가스관 **  (0) 2018.06.01
백준(BOJ) 1865 웜홀 **  (0) 2018.06.01