일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬
- 백준
- javascript
- 자료구조
- 프로그래머스
- 알고리즘 스터디
- pandas
- type hint
- 정보처리기사 c언어
- 노마드코딩
- Algorithm
- Matplotlib
- aws jupyter notebook
- 코딩테스트
- openCV
- Stack
- 데이터시각화
- 가상환경
- 알고리즘스터디
- python
- dataframe
- 선그래프
- programmers
- Join
- queue
- MySQL
- String Method
- Selenium
- NumPy
- 알고리즘
- Today
- Total
조금씩 꾸준히 완성을 향해
[Algorithm] 기초 문제 / 숫자만 추출 본문
▶ 문제
문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만 듭니다. 만들어진 자연수와 그 자연수의 약수 개수를 출력합니다. 만약 “t0e0a1c2h0er”에서 숫자만 추출하면 0, 0, 1, 2, 0이고 이것을 자연수를 만들면 120이 됩니다. 즉 첫 자리 0은 자연수화 할 때 무시합니다. 출력은 120를 출력하고, 다음 줄에 120 의 약수의 개수를 출력하면 됩니다. 추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.
▶ 입력 설명
첫 줄에 숫자가 썩인 문자열이 주어집니다. 문자열의 길이는 50을 넘지 않습니다.
▶ 출력 설명
첫 줄에 자연수를 출력하고, 두 번째 줄에 약수의 개수를 출력합니다.
▶ 입력
g0en2Ts8eSoft
▶ 출력
28
6
▷ 내가 짠 코드
import sys
sys.stdin = open('input.txt', 'rt')
n = input()
def count(x): # 약수의 개수를 반환하는 함수
cnt = 0
for i in range(1, x+1):
if x % i == 0 :
cnt += 1
return cnt
s = '' # 문자열에서 숫자를 확인해서 추출
for i in n:
for j in range(0, 10):
if i == str(j):
s += i
s =int(s)
print(s)
print(count(s))
문제에서 두 개의 단계를 요구하고 있기 때문에 짜는 과정에서 코드가 복잡해질 수도 있을 것 같았다. 그래서 약수의 개수를 반환하는 부분을 아예 함수로 빼서 먼저 구현했다. for 문을 돌려서, 나누어지는 모든 숫자를 구하는 아주 간단한 과정이었다.
다음으로 문자열에서 숫자를 추출하는 부분에서 조금 고민을 했다. 숫자인지 확인하는 함수가 분명 있을 거 같긴 한데 한 번도 사용해 본 적이 없었다. 그래서 문자 하나하를 for 문으로 돌려 그게 0에서 9사이의 숫자인지를 확인했다. 정확히 말하자면 숫자의 문자열 형태이기 때문에 string으로 변환해서 비교했고, True이면 그 값들을 보아 문자열로 붙였다. 마지막으로 이 문자열을 숫자로 만들어 코드를 완성했다.
▷ 예시 코드
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)
string method 중에 하나인 isdecimal() 을 사용한 코드이다.
이 함수는 해당 문자가 십진수인지 여부를 True or False로 반환해 준다. for 문을 돌려 문자가 십진수인 경우 정수로 바꾸고 바로 숫자형태로 만들어 주었다. 숫자형태로 만들 때는 자리수가 올라갈 때마다 10을 곱하는 방식을 사용했다. 이렇게 바로 더해주는 게 문자열에서 숫자로 변환하는 거 보다 훨씬 간결한 듯하다.
이를 참고해서 내 코드를 수정해보면,
# Before
s = ''
for i in n:
for j in range(0, 10):
if i == str(j):
s += i
s =int(s)
print(s)
# After
result = 0
for i in n:
for j in range(0, 10):
if i == str(j):
result = result*10+int(i)
print(result)
이렇게 짜 볼 수 있겠다.
'DataStructure & Algorithm > 문제풀이' 카테고리의 다른 글
[Algorithm] 부분 수열의 합 (0) | 2022.09.13 |
---|---|
[Algorithm] 기초 문제 / 카드 역배치 (0) | 2022.09.06 |
[Algorithm] 기초 문제 / 회문 문자열 검사 (0) | 2022.09.06 |
[Algorithm] 백준 2480번 주사위 세 개 with Python (0) | 2022.09.05 |
[Algorithm] 기초 문제 / 점수 계산 (0) | 2022.09.05 |