-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Description
💬 문제
[코딩테스트 연습 - 숫자 짝꿍](https://school.programmers.co.kr/learn/courses/30/lessons/131128)
💬 Idea
풀이 방법
- dict의 0번째 인덱스에 X에 포함된 key의 개수가 업데이트 될 수 있도록 한다. Y는 1번째 인덱스에.
- dict는 딕셔너리이므로 정렬되지 않는다는 특성이 있다. 따라서 딕셔너리의 key값을 정렬하여 해당 key값을 value값만큼 반복하여 result에 더한다.
- 이미 정렬된 문자열이 도출되었으므로 빈 문자열일 경우, 0이 여러번 반복되는 경우만 따로 처리해주어 최종 결과값을 도출한다.
풀이 방법
- 0부터 9까지 for문을 돌리며 X 문자열, Y 문자열 각각에 포함된 0~9 숫자를 뽑고 해당 array들의 최솟값을 뽑아서 result에 append한다.
- ex) X = “1000”, Y = “21000”
-
0 → x = [”0”, “0”, “0”]
y = [”0”, “0”, “0”]min.count = 3 이므로 result에 000이 더해진다.
-
1 → x = [”1”]
y = []
min.count = 0 이므로 result에 아무 값도 더해지지 않는다.
-
- ex) X = “1000”, Y = “21000”
- 가장 큰 정수를 도출하기 위해 result 문자열을 내림차순으로 정렬한다.
- 0부터 9까지 for문을 돌리며 X 문자열, Y 문자열 각각에 포함된 0~9 숫자를 뽑고 해당 array들의 최솟값을 뽑아서 result에 append한다.
💬 풀이
func solution(_ X:String, _ Y:String) -> String {
var dict: [String: [Int]] = ["0": [0, 0], "1": [0, 0], "2": [0, 0], "3": [0, 0], "4": [0, 0], "5": [0, 0], "6": [0, 0], "7": [0, 0], "8": [0, 0], "9": [0, 0],]
var result: String = ""
for i in X {
dict[String(i)]![0] += 1
}
for i in Y {
dict[String(i)]![1] += 1
}
for i in dict.sorted(by: { $0.key > $1.key }) {
result += String(repeating: i.key, count: i.value.sorted()[0])
}
result = result == "" ? "-1" : result
return result.allSatisfy({ $0 == "0" }) ? "0" : result
}
💬 더 나은 방법?
func solution(_ X:String, _ Y:String) -> String {
var result: String = ""
for i in 0...9 {
let x = X.filter({ String($0) == String(i) })
let y = Y.filter({ String($0) == String(i) })
result += String(repeating: String(i), count: min(x, y).count)
}
result = result.sorted(by: >).map({ String($0 )}).joined()
result = result == "" ? "-1" : result
return result.allSatisfy({ $0 == "0" }) ? "0" : result
}