Do.

2022 KAKAO BLIND RECRUITMENT - k진수에서 소수 개수 구하기, Swift 본문

Algorithm

2022 KAKAO BLIND RECRUITMENT - k진수에서 소수 개수 구하기, Swift

Hey_Hen 2022. 3. 15. 23:01

https://programmers.co.kr/learn/courses/30/lessons/92335

 

코딩테스트 연습 - k진수에서 소수 개수 구하기

문제 설명 양의 정수 n이 주어집니다. 이 숫자를 k진수로 바꿨을 때, 변환된 수 안에 아래 조건에 맞는 소수(Prime number)가 몇 개인지 알아보려 합니다. 0P0처럼 소수 양쪽에 0이 있는 경우 P0처럼 소

programmers.co.kr

 

1. 입력받은 숫자를 k진수로 바꾸고, 변환된 정수에서 조건에 맞는 소수를 찾아내는 문제

2. 0P0 조건을 4줄이나 설명되어 있는데, 잘 생각해보면 그냥 0을 기점으로 수를 나눠버리면 된다.

3. 소수를 구하는 가장 빠른 방법을 생각해보면 문제는 쉽게 풀린다.

 

import Foundation

func solution(_ n:Int, _ k:Int) -> Int {
  var result = 0
  var primeSet: Set<String> = []
  let kradix = String(n, radix: k, uppercase: true)
  var stack: String = ""

  func stackCheck(_ stack: inout String) {
    guard !stack.isEmpty else { return }
    if primeSet.contains(stack) {
      result += 1
    } else if isPrime(stack) {
      result += 1
      primeSet.insert(stack)
    }
    stack = ""
  }

  for number in kradix {
    if number != "0" {
      stack.write(String(number))
    } else {
      stackCheck(&stack)
    }
  }
  stackCheck(&stack)
  return result
}

func isPrime(_ number: String) -> Bool {
  let number = Int(number)!
  return number.isPrime
}

extension Int {
  var isPrime: Bool {
    guard self >= 2 else { return false }
    guard self != 2 else { return true  }
    guard self % 2 != 0 else { return false }
    return !stride(from: 3, through: Int(sqrt(Double(self))), by: 2).contains { self % $0 == 0 }
  }
}
Comments