728x90
반응형
🙆♂️문제
🙋♂️풀이
문제 요약 : 어떤 자연수 M이 있다면 M=245라고 가정했을 때 각 자리수의 합(245+2+4+5=256)을 분해합이라고 한다.
이 때 자연수 M을 분해합 N(256)의 생성자라고 한다. 분해합 N이 주어졌을 때 M이 될 수 있는 가장 작은 수를 찾아라.
🚀입력받기
n = int(input())
int형 값을 하나 입력 받습니다.
🚀 생성자 찾아서 배열에 넣기
decomDiv=[]
decomDiv.extend(str(n))
먼저 입력받은 값이 몇자리 수인지 구하는 배열을 만듭니다.
extend를 활용하여 1000이 입력되면 ["1","0","0","0"]이 배열에 입력되어서 4자리 수 임을 알게 됩니다.
자리 수를 체크하는 이유는 생성자를 구하는 최고의 경우의 수가 자리 수마다 다르기 때문입니다.
한 자리수당 최고로 많이 나올 수 있는 수가 9입니다.
그래서 n에 각 자리 수 만큼의 수와 9를 곱한 수를 뺀 수가 생성자가 될 수 있는 최소의 수입니다.
consts=[]
if n > 10:
minusNum = len(decomDiv)*9
for i in range(minusNum):
decomM = n - i
if decomM <= 0:
decomM=0
div=[]
div.extend(str(decomM))
intDiv = list(map(int,div))
const = decomM+sum(intDiv)
if const == n:
consts.append(decomM)
우선 10 이하의 수들은 예외로 두고 extend함수를 적극 활용했습니다.
extend 함수는 str만 가능하기 때문에 사용할 때 형변환을 해주고 다시 더할 때 int로 형변환을 해줘야 합니다.
그렇게 해서 구한 생성자들을 consts 배열에 입력합니다.
else:
if n%2==0:
consts.append(n//2)
10 이하의 경우는 짝수만 생성자를 갖고 있습니다. 그래서 짝수에 생성자 처리를 이렇게 했습니다.
🚀 출력하기
if len(consts)==0:
consts.append(0)
print(min(consts))
출력할 때는 위에서 값을 넣었던 consts 배열 중 최소 값을 출력하기 위해 min함수를 사용했고
만약 consts 배열에 아무 값도 들어가 있지 않다면(생성자가 없는 수 였다면)
0을 넣어서 0을 출력하도록 합니다.
728x90
반응형
'코딩테스트 > 백준' 카테고리의 다른 글
[백준][Python] 1018. 체스판 다시 칠하기 (0) | 2022.07.15 |
---|---|
[백준][Python] 7568. 덩치 (0) | 2022.07.15 |
[백준][Python] 2798번. 블랙잭 (0) | 2022.07.14 |
[백준][Python] 17478번. 재귀함수가 뭔가요? (0) | 2022.07.08 |
[파이썬] 00. 입력값 받는 법 (0) | 2022.07.07 |