[BAEKJOON] 백준 1356: 유진수 (C#)

2024. 5. 19. 22:04IT/BaekJoon

문제 링크

https://www.acmicpc.net/problem/1356

 

 

문제

유진수는 어떤 수를 10진수로 표현한 뒤 그 수를 두 부분으로 나눴을 때, 앞부분 자리수의 곱과 뒷부분 자리수의 곱이 같을 때를 말한다.

예를 들어, 1221은 유진수이다. 12와 21로 나눴을 때, 앞부분 자리수의 곱 1*2는 뒷부분 자리수의 곱 2*1과 같기 때문이다. 1236도 마찬가지로 유진수이다. 하지만, 1234는 아니다. 수를 나눌 때 항상 연속된 자리수를 나눠야하고, 각 부분에 적어도 한자리는 있어야 한다.

예를 들어, 12345는 총 4가지 방법으로 나눌 수 있다. 1-2345, 12-345, 123-45, 1234-5 어떤 수 N이 주어질 때, 이 수가 유진수인지 아닌지 구하는 프로그램을 작성하시오.

 

 

입력

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

 

 

출력

첫째 줄에 N이 유진수이면 YES, 아니면 NO를 출력한다.

 

 

 

통과한 답안

namespace _1356
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string input = Console.ReadLine();

            for (int i = 1; i < input.Length; i++)
            {
                string left = input.Substring(0, i);
                string right = input.Substring(i, input.Length - i);

                int leftNum = 1;
                int rightNum = 1;

                for (int j = 0; j < left.Length; j++)
                {
                    leftNum *= left[j] - '0';
                }

                for (int j = 0; j < right.Length; j++)
                {
                    rightNum *= right[j] - '0';
                }

                if (leftNum == rightNum)
                {
                    Console.WriteLine("YES");
                    return;
                }
            }

            Console.WriteLine("NO");
        }
    }
}

 

문제를 이해하는 것이 중요한데

유진수라는 개념은 숫자가 주어졌을 때, 그 숫자를 둘로 나눈 후에

나눠진 두 수에서 각각의 숫자들의 곱이 같은 숫자라는 개념이다.

 

문제에서 예시를 든게 4자리 숫자라서 이해하기가 좀 난해한데,

5자리의 숫자인 12345를 예시로 들면

1, 2345 / 12, 345 / 123, 45 / 1234, 5

로 나눌 수 있고, 각각의 곱을 비교하면

1, 120 / 2, 60 / 6, 20 / 24, 5

의 결괏값을 갖게되고 이는 유진수가 아니게 된다.

 

이러한 과정을 코드로 작성한 것이 위의 코드이며

숫자들을 관리하는 과정에서 처음부터 입력값을 숫자로 변경하는 것이 아니라

입력되는 숫자와 나누는 숫자를 문자로 처리하고

각각의 숫자의 곱을 하는 과정에서만 숫자로 바꾸기 위해 char - '0'의 방법을 사용하였다.

각각을 숫자로 처리하면 나누는 과정을 10의 몫과 나머지를 이용해야 하는데

이 방법은 코드를 구현하는 과정에서 실수가 발생할 수 있기 때문에

문자로 처리하고 이를 substring의 메서드를 이용하여 관리하였다.