파이썬 알고리즘 012 | 숫자만 추출

Yunny.Log ·2021년 1월 7일
0

Algorithm

목록 보기
12/318
post-thumbnail

12.숫자만 추출

문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만
듭니다. 만들어진 자연수와 그 자연수의 약수 개수를 출력합니다.
만약 “t0e0a1c2h0er”에서 숫자만 추출하면 0, 0, 1, 2, 0이고 이것을 자연수를 만들면 120이
됩니다. 즉 첫 자리 0은 자연수화 할 때 무시합니다. 출력은 120를 출력하고, 다음 줄에 120
의 약수의 개수를 출력하면 됩니다.
추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.

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

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

▣ 입력예제 1
g0en2Ts8eSoft

▣ 출력예제 1
28
6

<내 풀이>

s=[]
lst=[]

for i in range(0,10):
    i=str(i)
    s.append(i)

n=str(input())
for i in n :
    if i in s:
        lst.append(int(i))
        if lst[0]==0:
            lst.remove(lst[0])

#리스트안의 숫자들을 합친 숫자로 만들기

print(lst)            
sum=0
for i in lst:
    long=len(lst)
    l=lst.index(i)

    if l==long-1:
        i=i
        print(i)
    else : 
        i=i*(10**(long-1-l))
        print(i)
    sum+=i

print(sum)


#약수 갯수 구하기

cnt=0
for i in range(1,sum+1):     
    if sum%i==0:
        cnt+=1
print(cnt)
  • 되긴 되는데 너무 길다
    (원래 약수를 안구해도 되면 더 짧게 문자열로만 print해서 나타낼 수 있었는데 약수를 구해야돼서 숫자 처리 하느라)

  • 강사님 강의 보고 오니깐 내가 놓치고 있는 것 투성이었다 ㅠㅠ 일단 is decimal이런게 있는지도 몰랐고
    또 숫자 변환하는 법 까먹음 - res= res*10 + int(t)

<풀이>


# ****바로 숫자로 변환하는 방법****
s=input()
res=0
for x in s:
	if x.isdecimal():
    	res=res*10+int(x)
print(res)

<반성점>

  • 원래 약수를 안구해도 되면 더 짧게 문자열로만 print해서 나타낼 수 있었는데 약수를 구해야돼서 숫자 처리 하느라
  • 강사님 강의 보고 오니깐 내가 놓치고 있는 것 투성이었다
    일단 is decimal이런게 있는지도 몰랐고,
    또 숫자 변환하는 법을 까먹었었다

<배운 점>

  • isdigit

    알파벳이 아닌 숫자들은 다 찾아주는 것
    막 2**2 이런것도 다 숫자로 인식하고 찾아줌

  • isdecimal

    0~9까지 찾아주는 것
    딱 0 1 2 3 4 5 6 .. 9 이런 형태로 되어있는 것만 찾아준다

  • str중에 숫자인 문자가 있을 때 isdecimal()을 사용하면 숫자(0~9)만 골라낼 수 있다.
    10 이상의 숫자를 찾아야 할 경우는 isdigit()을 사용한다.

  • ★숫자로 변환해주기★ : res=res*10 + int(x)

    res=0
    res=res*10+int(x)
    => 이 형태로 해주면 된당
    => 2 8 9 입력했다고 하면
    res=2
    res=2x10 + 8
    res=28x10 +9

0개의 댓글