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이라 충분히 빠르다.