Programming/백준

[브론즈 1] 백준 1356 - 유진수 (파이썬)

pental 2025. 9. 9. 10:00

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

정수 N이 주어졌을 때, 이 수가 유진수인지 판별해야한다.

유진수는 어떤 수 N을 앞부분과 뒷부분으로 나누었을 때, 앞부분 각 자리수의 곱과 뒷부분 각 자리수의 곱이 같은 경우를 의미한다.

예를 들어서 다음과 같다.

1221 -> (12 | 21) => 1 * 2 = 2, 2 * 1 = 2 -> 즉, 유진수

1236 -> (123 | 6) => 1 * 2 * 3 = 6, 6 = 6 -> 즉, 유진수

1234 -> 어떤 방법으로도 곱이 같아지지 않음 -> 즉, 유진수 아님

코드는 다음과 같이 작성하였다.

# 백준 1356 - 유진수

N = list(input())

start = len(N)
result = False
for i in range(1, start) :
    A = N[:i]
    B = N[i:]

    temp_A, temp_B = 1, 1

    for x in A :
        temp_A *= int(x)
    for y in B :
        temp_B *= int(y)

    if temp_A == temp_B :
        result = True
        break

if result : 
    print("YES")
else :
    print("NO")

start는 전체 길이를 나타내며, result의 경우 유진수 여부를 판별하는 변수이다.

자르는 위치를 1부터 시작해서 start 까지 돌면서 A와 B를 나눈다. 즉 앞부분과 뒷부분을 나누고, 각각 앞부분과 뒷부분의 각 요소를 곱해서 두 곱이 같으면 유진수, 다르면 유진수가 아니도록 코드를 작성하였다.

예를 들어서 1221를 입력한 경우는 다음과 같다.

 

  • 길이: 4
  • i=1 → A="1", B="221" → 곱: 1 vs 4 → 불일치
  • i=2 → A="12", B="21" → 곱: 2 vs 2 → 일치 → YES 출력

시작복잡도는 O(N^2)이라 조금 비효율 적이지만 그래도 자리수가 최대 10이라 충분히 빠르다.