Lumpy Space Princess - Adventure Time
코딩테스트/파이썬 알고리즘 문제풀이 입문

[파이썬 알고리즘 문제풀이 입문] 탐색&시뮬레이션 - 숫자만 추출

yaebb_82 2023. 4. 26.

*문제 본문은 강의 내용과 관련되어 있어 자세하게 적지 않았습니다.

 

 

 

문제

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

 

 

 

풀이

• 내 풀이

import sys
input = sys.stdin.readline

N = input().rstrip()
nums = ''
count = 0

for i in range(len(N)):
    if N[i].isalpha():
        continue
    else:
        nums += N[i]

print(int(nums))

for i in range(1, int(nums)+1):
    if int(nums) % i == 0:
        count += 1

print(count)

• 답안 : Python

import sys
input = sys.stdin.readline

N = input().rstrip()
res = 0
cnt = 0

# isdecimal() : 0~9까지의 숫자인지 확인
for x in s:
    if x.isdecimal():
        res = res * 10 + int(x)

print(res)

for i in range(1, res+1):
    if res % i == 0:
        cnt += 1

print(cnt)

• 답안 : Kotlin (내가 바꿔본 것 / 정확X)

import java.io.*
import java.util.*

fun main(args: Array<String>) = with(BufferedReader(InputStreamReader(System.`in`))){
    var N = readLine()
    var res = 0
    var cnt = 0

    for(i in N) {
        if(i.isDigit()) {
            // i.toInt() 하면 ASCII값을 반환한다.
            var num = Character.getNumericValue(i)
            res = res * 10 + num
        }
    }
    
    println(res)

    for(i in 1 until res+1) {
        if(res % i == 0) {
            cnt += 1
        }
    }

    println(cnt)
}

- 나는 문자열에 접근할 때 인덱스로 접근했다면, 답안에서는 직접적으로 접근해서 하나씩 꺼내서 for문을 돌렸다.

- 그리고 나는 isalpha()로 접근해서 알파벳이라면 continue, 그 외의 경우에 로직을 처리해주었다. 하지만 답안에서는, 쉽게 isdecimal()로 else문 없이 처리할 수 있다는 것을 알게 되었다.

 

 

 

반응형

댓글