티스토리 뷰
알고리즘 학습/with Swift
[Programmers] - 소수 만들기 (Summer/Winter Coding(~2018)) with Swift
B_log 2021. 6. 22. 23:58반응형
📎 간략한 문제 정리
- 주어진 숫자 중 3개의 수를 더했을 때 소수가 되는 경우의 개수를 구합니다.
📈 문제 분석
- 문제의 조건이 최대 50개이므로 3가지 요소를 정할 때 3중 for문으로 접근해도 속도 이슈가 발생하지 않습니다.
🙋♂️ 내가 처음 생각한 해결 방법
- 3중 for문을 통해 요소 3가지를 선택하고 isPrime 메소드를 통해 소수인지 판별합니다. 소수 판별 시 n-1까지 체크하는 것이 아니라 sqrt(n-1)까지 확인하면 됩니다.
💻 풀이한 코드
import Foundation
func solution(_ nums:[Int]) -> Int {
var numsSum: [Int] = []
for i in 0 ..< nums.count - 2 {
for j in i+1 ..< nums.count - 1 {
for k in j+1 ..< nums.count {
numsSum.append(nums[i]+nums[j]+nums[k])
}
}
}
return numsSum.filter(isPrime(checkNumber:)).count
}
func isPrime(checkNumber: Int) -> Bool {
let criterion = Int(Double(checkNumber).squareRoot())
for i in 2...criterion {
if checkNumber % i == 0 {
return false
}
}
return true
}
📝 해결 과정에서 만난 문제, 고민들
Python의 경우 permutation이 라이브러리 존재하지만 Swift에는 없으므로 직접 구현해야합니다. 하지만 문제에서는 3개로 항의 개수가 정해져있으므로 단순 for문을 통해 구현 가능했습니다.
문제의 조건이 부족해서 문제가 발생했습니다. 기본 배열에 중복된 숫자가 들어있지 않다는 조건이 있지만 합이 중복이 되는 경우 카운팅하는지에 대한 조건이 없습니다. 이 문제는 중복된 숫자는 존재하지 않지만 중복된 합은 다르게 여기기 때문에 위의 풀이로 진행합니다. 하지만 만약에 중복된 합을 개수에 포함시키지 않으면 numsSum만 변경하면 됩니다.
// var numsSum: [Int] = [] var numsSumSet: Set<Int> = [] // numsSum.append(nums[i]+nums[j]+nums[k]) numsSumSet.insert(nums[i]+nums[j]+nums[k])
https://programmers.co.kr/learn/courses/30/lessons/12977?language=swift
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 파이썬알고리즘인터뷰#4장
- 나무자르기#BOJ#이분탐색#Python
- PassingCars#Codility#Python
- Brackets#Stacks and Queues#Codility#Python
- 반복수열#백준알고리즘#Python
- 미로 탐색#백준알고리즘#Python
- Triangle#Sorting#Codility#Python
- 토마토#백준알고리즘#Python
- 리모컨#완전탐색#BOJ#Python
- 종이자르기#분할정복#BOJ#Python
- 랜선자르기#이분탐색#BOJ#Python
- 섬의개수#백준알고리즘#Python
- 공유기 설치#BOJ#이분탐색#Python
- django
- 쿼드트리#BOJ#분할정복#Python
- 배열합치기#분할정복#BOJ#Python
- 텀 프로젝트#백준알고리즘#Python
- django#slicing
- 백준 알고리즘#BackTracking
- filter#isalnum#lower
- Swift#Tuples#Range
- 병든 나이트#BOJ#탐욕법#Python
- N으로 표현#DP#Programmers#Python
- 순열사이클#BOJ#Python
- Distinct#Codility#Python
- NumberofDiscIntersections#Codility#Sort#Python
- API#lazy#
- 터틀비치#리콘#xbox#controller
- 암호코드#dp#BOJ#Python
- 날짜 계산#BOJ#완전탐색#Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함