안녕하세요 코코종입니당!
이번에도 작년 문제인데 그때는 너어어무 어렵게 생각했던 문제인데... 그때는 무슨 조건이 4개나 있어 😵💫😵💫하면서 어려워했는데 다시 찬찬히 보니까 쉽더라구요! (근데 왜 프로그래머스에서 이 문제의 점수를 많이 주는지는 모르겠습니다 주차요금이 1점 주더만... 얘는 8점이나?)
https://programmers.co.kr/learn/courses/30/lessons/92335
import Foundation
func isPrimeNum(_ n: Int) -> Bool {
if n == 2 || n == 3{
return true
} else if (n != 2 && n%2 == 0) || n == 1 {
return false
} else {
let sqrtInt = Int(sqrt(Double(n)))
for i in 3...sqrtInt {
if n%i == 0 {
return false
}
}
return true
}
}
func solution(_ n:Int, _ k:Int) -> Int {
// case1 0P0
// case2 P0
// case3 0P
// case4 P
let converted: String = String(n, radix: k)
let splited = converted.components(separatedBy: "0")
var result = 0
splited.forEach {
// ""은 0으로 처리
let num = Int($0) ?? 0
if isPrimeNum(num) {
result += 1
}
}
return result
}
간단하게 설명하자면 k진수로 변환 후 0을 기준으로 쪼갠 배열을 돌면서 소수인지 판단하면 되는 문제였습니다! 간단하쥬?(그러니까 왜 8점이냐고 억울하게)
그런데 입출력 예시를 보면 00이 들어가있는 경우 components로는 ""이 나올수 있더라구요! 그래서 optional에 대한 처리를 0으로 해줬습니다(0은 소수가 아니니까~)
생각보다 `String(n, radix: k)`를 몰라서 하나하나 해결하신분들이 많더라구여! 저도 스위프트에 없을거라고 생각하긴 했지만 혹시 몰라서 검색을 해봤더니 띠용? 이걸 해주네? 하면서 가져다가 썼습니다! 그래서 다른분들보다 사아아알짝 빨랐습니다.
소수인지 판단하는 부분은 워낙 많이해서 다 아실거 같아서 설명은 패스하겠습니다(귀찮은거 아님^^...) 단, 제곱근까지 나누는게 아니라 n-1까지 나눠보는것으로 하면 1번 문제에서 시간초과가 나더라구요 그래서 바로 제곱근으로 처리해줬습니다.
여담으로 과제형 코딩테스트를 진행중인데 겹쳐서 새벽에 졸린눈을 비비며 풀었는데 생각보다 쉬워서 일찍(2am)에 잤습니당!!
그럼 저는 이만~~~!!
'알고리즘' 카테고리의 다른 글
[Swift 알고리즘] 백준 6198 - 옥상 정원 꾸미기 (0) | 2022.03.27 |
---|---|
[Swift 알고리즘] 프로그래머스 lv3 - 입국심사 (0) | 2022.03.20 |
[Swift 알고리즘] 프로그래머스 lv2 - 주차 요금 계산 (0) | 2022.03.15 |
[Swift 알고리즘] 프로그래머스 lv1 - 신고 결과 받기 (0) | 2022.03.15 |
[Swift 알고리즘] 프로그래머스 lv2 - 오픈채팅방 (0) | 2022.03.14 |