일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 28 | 29 | 30 | 31 |
- Bookmark
- Algorithm
- Django Blog
- passport.js
- 북마크만들기
- Django
- 장고 프로젝트
- 개발
- Node.js
- python
- 프로젝트
- 장고 개발 순서
- 북마크앱
- MyPick31
- join()
- 자바스크립트
- 장고
- Blog
- 예술영화추천
- mongodb
- til
- ART_Cinema
- 타사인증
- MYSQL
- 독립영화플랫폼
- Exercism
- 파이썬 웹프로그래밍 장고
- 알고리즘
- JavaScript
- 장고 프로젝트 순서
- Today
- Total
Juni_Dev_log
[탐색 및 시뮬레이션] 파이썬 알고리즘 문제 2-2 "숫자만 추출" 본문
[시간복잡도]
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/
m.blog.naver.com/wideeyed/221843217358
'CodingTest > 인프런 (Algorithm)' 카테고리의 다른 글
[탐색 및 시뮬레이션] 파이썬 알고리즘 문제 2-4 "두 리스트 합치기" (0) | 2021.02.23 |
---|---|
[탐색 및 시뮬레이션] 파이썬 알고리즘 문제 2-3 "카드 역배치" (0) | 2021.02.22 |
[탐색 및 시뮬레이션] 파이썬 알고리즘 문제 2-1 "회문 문자열 검사" (0) | 2021.02.21 |
(인프런) 파이썬 알고리즘 문제1-10 "점수 계산" (0) | 2021.02.21 |
(인프런) 파이썬 알고리즘 문제1-9 "주사위 게임" (0) | 2021.02.19 |