문제
https://school.programmers.co.kr/learn/courses/30/lessons/388352
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
내가 푼 방법
비밀코드의 범위가 주어지면 해당 범위에서 만들 수 있는 모든 조합을 먼저 구한 뒤,
각 ans의 응답값을 비교해서 모두 일치하는 경우 하나의 비밀코드로 간주했다.
조합과 이중반복문으로 시간초과가 걸릴 것 같았지만, 가까스로 통과한 느낌이였다.
import Foundation
func solution(_ n:Int, _ q:[[Int]], _ ans:[Int]) -> Int {
let targetArr = Array(1...n)
var total = 0
var results = [[Int]]()
// 조합
func combi(targetArr: [Int], targetNum: Int, index: Int, arr: [Int]) {
if arr.count == targetNum {
results.append(arr)
return
}
for i in index..<targetArr.count {
combi(targetArr: targetArr, targetNum: targetNum, index: i+1, arr: arr + [targetArr[i]])
}
}
combi(targetArr: targetArr, targetNum: 5, index: 0, arr: [])
// 각 응답값 비교
results.forEach { element in
for i in 0..<q.count {
let arr = q[i]
if !compare(lhs: arr, rhs: element, correct: ans[i]) {
break
}
if i == q.count-1 {
total += 1
}
}
}
return total
}
func compare(lhs: [Int], rhs: [Int], correct: Int) -> Bool {
var count = 0
for i in 0..<lhs.count {
if rhs.contains(lhs[i]) { count += 1}
}
if count == correct { return true }
return false
}
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 서버 증설 횟수 Swift (0) | 2025.03.27 |
---|---|
[프로그래머스] 가장 먼 노드 Swift (0) | 2025.03.26 |
[프로그래머스] 완전 범죄 Swift (0) | 2025.03.25 |
[프로그래머스] 미로 탈출 Swift (1) | 2024.04.23 |
[프로그래머스] 행렬 테두리 회전하기 Swift (0) | 2024.04.23 |