문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만 듭니다. 만들어진 자연수와 그 자연수의 약수 개수를 출력합니다.

만약 “t0e0a1c2h0er”에서 숫자만 추출하면 0, 0, 1, 2, 0이고 이것을 자연수를 만들면 120이 됩니다.

즉 첫 자리 0은 자연수화 할 때 무시합니다.

출력은 120를 출력하고, 다음 줄에 120 의 약수의 개수를 출력하면 됩니다.

추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.

 

▣ 입력설명

첫 줄에 숫자가 썩인 문자열이 주어집니다. 문자열의 길이는 50을 넘지 않습니다.

 

▣ 출력설명 첫 줄에 자연수를 출력하고, 두 번째 줄에 약수의 개수를 출력합니다.

 

▣ 입력예제 1

g0en2Ts8eSoft

 

▣ 출력예제 1

28 6

 

풀이1

 >> isdigit()를 사용함, isdigit()가 참이면 숫자

 >> 숫자면 StrNum에 추가해줌(문자열)이를 int로 변환해서 소수 찾아줌

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import sys
sys.stdin=open("input.txt", "r")
MixString = list(input())
 
IntNum = 0
 
#혼합된 문자열 리스트에서 숫자 추출
def pickNum(mixString):
    StrNum = ''
    for i in mixString:
        if i.isdigit() == True :    #isdigit()가 참이면 숫자
            StrNum += i             #문자열숫지에 찾은 숫자 더해주기
    return StrNum
 
#소수 찾기
def findAliquotNumCount(IntNum):
    AliquotNumCount = 0
    for i in range(1, IntNum+1):
        if IntNum % i == 0 :
            AliquotNumCount += 1
    return AliquotNumCount
 
IntNum=int(pickNum(MixString))      #문자열숫자를 int로 변환
AliquotCount = findAliquotNumCount(IntNum)
 
print(IntNum)
print(AliquotCount)
 
cs

 

풀이2

 >> isdecimal()을 이용해서 찾음(0~9까지의 숫자를 찾을때 사용) x.isdecimal가 true이면 x는 숫자

 >> res=res*10+int(x)를 이용해서 숫자x를 더해줌(10의자리를 계속 곱해줘서 자리수 만들어줌)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import sys
sys.stdin=open("input.txt""r")
= input()
res = 0
for x in s:
    if x.isdecimal():
        res=res*10+int(x)   #숫자화 시켜서 저장(뒤짚은 소수 참고)
print(res)
 
cnt = 0
for i in range(1, res+1):
    if res % i == 0:
        cnt +=1
print(cnt)
 
cs
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_2_숫자만 추출