Juni_Dev_log

[탐색 및 시뮬레이션] 파이썬 알고리즘 문제 2-2 "숫자만 추출" 본문

CodingTest/인프런 (Algorithm)

[탐색 및 시뮬레이션] 파이썬 알고리즘 문제 2-2 "숫자만 추출"

Juni_K 2021. 2. 22. 11:03

숫자만 추출

[시간복잡도]

O(N)

[공간복잡도]

O(1)

 

 

Problem

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

만들어진 자연수와 그 자연수의 약수 개수를 출력합니다.

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

즉 첫 자리 0은 자연수화 할 때 무시합니다. 출력은 120를 출력하고, 다음 줄에 120 의 약수의 개수를 출력하면 됩니다. 추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.

 

▣ 입력설명

 

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

 

▣ 출력설명

 

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

 

▣ 입력예제

 

g0en2Ts8eSoft

 

▣ 출력예제

 

28

6

 

 

💯 Solution ①

 

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
###숫자만 추출###
import sys
sys.stdin=open("input.txt","rt")
 
# res : 문자열에서 숫자를 담을 배열
res=[]
n=list(input())
for i in range(len(n)):
    # isdigit() 을 이용하여, n[i]가 숫자인지 확인 (숫자면 True, 아니면 False)
    if n[i].isdigit():
        res.append(n[i])
 
# res를 join하고 앞쪽에 0을 제거한다. for문을 돌리기위해서 정수화시킨다. join() / lstrip()
score = int(''.join(res).lstrip("0"))
 
# divisor : 약수들의 배열
divisor=[]
# 약수는 1부터 시작해서 score까지 반복해야한다.
for j in range(1,score+1):
    if score%j==0:
        divisor.append(j)
 
print(score)
print(len(divisor))
 
cs

 

- isdigit() : 문자열에서 숫자를 확인하는 메서드 (숫자라면 True / 아니라면 False 반환)

- join() : 리스트를 붙이는 메서드

- lstrip() : 앞쪽에 해당 문자가 있다면 제거하는 메서드

 

💯 Solution ②

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys
sys.stdin=open("input.txt","r")
s=input()
res=0
for x in s:
    # isdigit():문자열에서 숫자형태 찾기 / isdecimal():0~9까지 숫자찾기
    if x.isdecimal():
        #자동적으로 제일 앞 0은 제거된다.
        res=res*10+int(x)
        
cnt=0
for i in range(1,res+1):
    if res%i==0:
        cnt+=1
 
print(cnt)
cs

- 문자열로 for 문을 돌리면 하나씩 추출한다.

- isdecimal()을 활용하여 해당 문자열 중에서 0~9까지의 숫자를 파악한다. (3² 이런것들은 파악할 수 없다. => isdigit())

- res*10+int(x)를 통해서 해당 값들을 붙이고 자연스럽게 제일 앞 0을 없앤다.

- cnt 라는 약수의 갯수를 세는 변수를 만든다.

- for문을 통해서 나누어지는 값이 있다면 cnt+=1 을 하고 cnt를 출력한다.

 

 

 

📚 참고

wayhome25.github.io/python/2017/02/26/py-14-list/

 

파이썬 파트14. 리스트 더 알아보기 - split, join, slice · 초보몽키의 개발공부로그

파이썬 파트14. 리스트 더 알아보기 try hello world 파이썬 입문 강의 리스트가 가진 다양한 기능 list.index( value ) : 값을 이용하여 위치를 찾는 기능 list.extend( [value1, value2] ) : 리스트 뒤에 값을 추가 (

wayhome25.github.io

 

m.blog.naver.com/wideeyed/221843217358

 

[Python] 문자열 앞 또는 뒤 0제거 (remove leading or trailing zeros in a string)

파이선에서 문자열에 앞 또는 뒤 0을 제거(remove leading or trailing zeros in a string)하는 방법에 대...

blog.naver.com

 

it-neicebee.tistory.com/33

 

[Python] isdecimal(), isdigit(), isnumeric() 함수에 대해서

isdecimal() isdigit() isnumeric() => 주어진 문자열이 숫자로 되어있는지 검사하는 함수 a = '12345678' print(a.isdigit()) print(a.isdecimal()) print(a.isnumeric()) a가 그냥 평범한 숫자 문자열일때는 세..

it-neicebee.tistory.com

 

Comments