해결 과정
나의 풀이
Python
import math
def is_prime_number(x):
if x == 1:
return False
for i in range(2, int(math.sqrt(x)) + 1):
if x % i == 0:
return False
return True
def converse_number(n, q):
rev_base = ''
while n > 0:
n, mod = divmod(n, q)
rev_base += str(mod)
return rev_base[::-1]
def solution(n, k):
answer = 0
number = converse_number(n, k)
candidates = number.split("0")
for c in candidates:
try:
if c == "0":
continue
else:
if is_prime_number(int(c)):
answer += 1
except:
continue
return answer
Swift
Swift에서는 진수변환을 할 수 있는 메소드가 존재한다.
import Foundation
func isPrimeNumber(_ n:Int) -> Bool {
if n == 1 { return false }
for i in 2..<Int(sqrt(Double(n))) + 1 {
if n % i == 0 { return false }
}
return true
}
func solution(_ n:Int, _ k:Int) -> Int {
var answer = 0
let strNumber = String(n, radix: k) // 진수 변환
let candidates = strNumber.split(separator: "0").map { Int($0)! }
for c in candidates {
if isPrimeNumber(c) { answer += 1 }
}
return answer
}
더보기
Python 코드를 그대로 변환한 코드
import Foundation
func converseNumber(_ n:Int, _ k: Int) -> String {
var reverseBase: String = ""
var quotient: Int = n
var remainder: Int
while quotient > 0 {
(quotient, remainder) = quotient.quotientAndRemainder(dividingBy: k)
reverseBase += String(remainder)
}
return String(reverseBase.reversed())
}
func isPrimeNumber(_ n:Int) -> Bool {
if n == 1 { return false }
for i in 2..<Int(sqrt(Double(n))) + 1 {
if n % i == 0 { return false }
}
return true
}
func solution(_ n:Int, _ k:Int) -> Int {
var answer = 0
let strNumber = converseNumber(n, k)
let candidates = strNumber.split(separator: "0").map { Int($0)! }
for c in candidates {
if isPrimeNumber(c) { answer += 1 }
}
return answer
}
다른 풀이
IDEA
몫과 나머지를 한 번에 받을 수 있는 함수
Python의 divmod
Swift의 quotientAndRemainder
Swift의 진수 변환
String(_ value: T, radix: Int = 10, uppercase: Bool = false)
'Coding Test > 문제 풀이' 카테고리의 다른 글
[문제 풀이] 백준 12865 (0) | 2022.03.21 |
---|---|
[문제 풀이] 문자열 문제 (백준) (0) | 2022.03.21 |
[문제 풀이] 캐시 (Python, Swift) (0) | 2022.03.15 |
[문제 풀이] 정수 삼각형 (0) | 2022.03.14 |
[문제 풀이] 추석트래픽 (0) | 2022.03.11 |