[알고리즘] 숫자만 추출
(문제) 숫자만 추출
문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.
만들어진 자연수와 그 자연수의 약수 개수를 출력합니다.
만약 “t0e0a1c2h0er”에서 숫자만 추출하면 0, 0, 1, 2, 0이고 이것을 자연수를 만들면 120이됩니다.
즉 첫 자리 0은 자연수화 할 때 무시합니다. 출력은 120를 출력하고, 다음 줄에 120의 약수의 개수를 출력하면 됩니다.
추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.
입력설명
첫 줄에 숫자가 썩인 문자열이 주어집니다. 문자열의 길이는 50을 넘지 않습니다.
출력설명
첫 줄에 자연수를 출력하고, 두 번째 줄에 약수의 개수를 출력합니다.
테스트케이스
입력예제 | 출력예제 |
---|---|
g0en2Ts8eSoft | 28 6 |
kdk1k0kdjfkj0kkdjkfj0fkd | 1000 16 |
dkf0jkk0dkjkgjljl1kgh0ekjlkjf2lkjsklfjlkdj | 102 8 |
Akdj0Gk1djADG2SDGkdjf | 12 6 |
Akdj0Gk1djADG2SDGkdj0f | 120 16 |
해결방법
ASCII 코드로 0은 48이므로 9 까지는 58 이므로 58보다 큰 녀석만 문자열 더해서 다른 문자열에 합친다.
구해진 숫자를 int로 형변환을 하고, 약수를 구하기 위해서 자기 자신의 반절까지 반복문을 돌려서 나누어 떨어지는 것이 있으면 count + 1을 해서 약수의 개수를 저장하는 count 변수를 증가 시킨다.
끝나면 마지막에 자기 자신까지 약수에 포함하니 count + 1을 하여 약수의 총 개수를 구한다.
코드
mixed = input()
number = ""
count = 0
for word in mixed:
# ASCII CODE 사용
if ord(word) < 59:
number += word
number = int(number)
# 숫자 출력
print(number)
# 약수의 개수
# 반절까지 없으면 약수 없음
for i in range(1, number//2+1):
if number % i == 0:
count = count + 1
# 약수들을 구하고 자기 자신 까지
print(count+1)
댓글남기기