본문 바로가기

알고리즘/백준

백준1236-유진수(브론즈1)

반응형

문제출처 : https://www.acmicpc.net/problem/1356

 

1356번: 유진수

첫째 줄에 수 N이 주어진다. 이 수는 2,147,483,647보다작거나 같은 자연수이다.

www.acmicpc.net

문제풀이>

해당 숫자를 앞과 뒷부분으로 분리 하는 방법을 아는지 묻는 문제

#include <iostream>
#include <cmath>
#include <cstdlib>

using namespace std;

int getnumlen(long long n)
{
    int res=0;
    while(n)
    {
        res++;
        n/=10;
    }
    return res;
}

long long frontMulti(long long n,int pos)
{
    n = n /(int)pow(10,pos);
    long long res =1;
    while(n)
    {
        res *=n%10;
        n/=10;
    }
    return res;
}

long long rearMulti(long long n,int pos)
{
    long long res =1;
    for(int i=0;i<pos;i++)
    {
        res *=n%10;
        n/=10;
    }
    return res;
}

bool check(long long n)
{
    int numlen = getnumlen(n);
    for(int i=1;i<numlen;i++)
    {
        if(frontMulti(n,numlen-i)==rearMulti(n,numlen-i)) return true;
    }
    return false;
}

int main()
{
    long long n;
    cin >> n;

    if(check(n)) cout << "YES";
    else cout <<"NO";
    return 0;
}
반응형