문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만 듭니다. 만들어진 자연수와 그 자연수의 약수 개수를 출력합니다.
만약 “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")
s = 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차원 리스트 탐색 )_4_두 리스트 합치기 (0) | 2021.08.02 |
---|---|
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_3_카드 역배치 (0) | 2021.08.01 |
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_1_회문 문자열 검사 (0) | 2021.07.29 |
코드 구현력 기르기_10_점수계산 (0) | 2021.07.28 |
코드 구현력 기르기_9_주사위 게임 (0) | 2021.07.27 |
탐색&시뮬레이션(string, 1차원, 2차원 리스트 탐색 )_2_숫자만 추출