728x90
문제
유진수는 어떤 수를 10진수로 표현한 뒤 그 수를 두 부분으로 나눴을 때, 앞부분 자리수의 곱과 뒷부분 자리수의 곱이 같을 때를 말한다.
예를 들어, 1221은 유진수이다.
12와 21로 나눴을 때, 앞부분 자리수의 곱 1*2는 뒷부분 자리수의 곱 2*1과 같기 때문이다.
1236도 마찬가지로 유진수이다.
하지만, 1234는 아니다.
수를 나눌 때 항상 연속된 자리수를 나눠야하고, 각 부분에 적어도 한자리는 있어야 한다.
예를 들어, 12345는 총 4가지 방법으로 나눌 수 있다.
1-2345, 12-345, 123-45, 1234-5 어떤 수 N이 주어질 때, 이 수가 유진수인지 아닌지 구하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/1356
입력
첫째 줄에 수 N이 주어진다.
이 수는 2,147,483,647보다 작거나 같은 자연수이다.
출력
첫째 줄에 N이 유진수이면 YES, 아니면 NO를 출력한다.
예제
# input
1236
# output
YES
# input
1
# output
NO
# input
4729382
# output
NO
문제 풀이
import sys
input = sys.stdin.readline
# 입력받기
N = input().rstrip()
for i in range(1, len(N)):
# 왼쪽, 오른쪽 자리수 나누기
left = N[:i]
right = N[i:]
left_mul, right_mul = 1, 1
# 왼쪽 자리수 곱 구하기
for l in left:
left_mul *= int(l)
# 오른쪽 자리수 곱 구하기
for r in right:
right_mul *= int(r)
# 두 부분의 곱셈 결과가 같으면 'YES'를 출력하고 루프 종료
if left_mul == right_mul:
print('YES')
break
# 두 부분의 곱셈 결과가 같은 경우가 없으면 'NO'를 출력
else:
print('NO')
파이썬을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.
728x90