이 글에서는 주어진 문제를 해결하기 위한 풀이 방법과 접근 과정을 자세히 알아보겠습니다.
문제 정의
하나의 숫자 n이 주어졌을 때, n의 모든 자릿수가 n을 나눌 수 있는지 판별하는 것이 이번 문제의 핵심입니다.
접근 방법
문제를 해결하기 전에 먼저 고려해야 할 중요한 예외 상황이 있습니다. 바로 숫자에 0이 포함된 경우입니다. 0으로 나누게 되면 '0으로 나누기 예외(ZeroDivisionError)'가 발생하기 때문에, 입력값에 0이 있다면 즉시 "No"를 반환해야 합니다.
0이 없는 경우에는 각 자릿수가 실제로 n을 나눌 수 있는지 하나씩 확인합니다. 이때 임시 변수인 flag를 활용하여 조건 검사 결과를 저장하고, 최종적으로 모든 자릿수가 나누기 가능한지 판단할 수 있습니다.
구현 코드
n = int(input())
flag = 1
for i in str(n):
if int(i) != 0 and n % int(i) == 0:
flag = 1
else:
flag = 0
if(flag == 1):
print("Yes")
else:
print("No")실행 결과
입력: 22 출력: Yes
코드 설명
위 코드의 동작 원리를 단계별로 살펴보면 다음과 같습니다.
1. 입력받은 정수 n을 문자열로 변환하여 각 자릿수에 순차적으로 접근합니다.
2. 각 자릿수가 0이 아니면서 동시에 n을 해당 자릿수로 나눴을 때 나머지가 0이라면, flag를 1로 유지합니다.
3. 위 조건을 만족하지 않는 자릿수가 하나라도 존재하면 flag가 0으로 변경됩니다.
4. 반복문이 종료된 후 flag 값이 1이면 "Yes", 0이면 "No"를 출력합니다.
예를 들어 숫자 22의 경우, 두 자릿수가 모두 2이고 22 ÷ 2 = 11로 나누어떨어지기 때문에 "Yes"가 출력됩니다. 반면 23처럼 3으로 나누어떨어지지 않는 자릿수가 있으면 "No"가 출력됩니다.
마무리
이번 글에서는 파이썬을 활용해 숫자의 모든 자릿수가 그 숫자 자신을 나눌 수 있는지 확인하는 알고리즘을 학습했습니다. 0으로 나누기 예외 처리와 플래그 변수를 활용한 조건 검사라는 두 가지 핵심 개념을 기억하면, 비슷한 유형의 자릿수 문제도 손쉽게 해결할 수 있습니다.