티스토리 게시물 업로드 문제는 좋은 방법을 찾게 되어! 다시 꾸준하게 올리도록 하겠습니다~
설계
맨 처음 문제를 접했을 땐 Set 활용해서 교집합을 구해주고 정렬해주면 되겠다!
싶었지만, 겹치는 개수도 생각을 해줘야 했습니다.
그래서 X, Y를 순회하여 각 자리수의 개수를 카운팅해서 해결해보자로 접근하였습니다.
git : 숫자 짝꿍
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/131128
문제 풀이
xNumberArray, yNumberArray는 각각 X, Y를 자릿수를 순회하여 카운팅 값 저장
resultArray 는 최대 겹치는 수는 두 수 중 작은 수 이니 xNumberArray, yNumberArray 의 최소값을 넣어준다!
숫자짝꿍은 겹치는 수들의 최대값이므로 resultArray를 역순으로하여 문자열을 만들어준다.
비어있는 경우 -1, Int 0 인 경우 0으로 값을 대입 후 반환해준다!!
func solution(_ X:String, _ Y:String) -> String {
var xNumberArray: [Int] = Array.init(repeating: 0, count: 10)
var yNumberArray: [Int] = Array.init(repeating: 0, count: 10)
var resultArray: [Int] = Array.init(repeating: 0, count: 10)
X.forEach{ xChar in
if let xNumber = Int(String(xChar)) {
xNumberArray[xNumber] += 1
}
}
Y.forEach{ yChar in
if let yNumber = Int(String(yChar)) {
yNumberArray[yNumber] += 1
}
}
for i in 0...9 {
resultArray[i] = min(xNumberArray[i], yNumberArray[i])
}
var result = resultArray.enumerated().reversed().reduce("", { result, newItem in
return result + String.init(repeating: String(newItem.offset), count: newItem.element)
})
if(result.isEmpty) {
result = "-1"
}
if let resultNumber = Int(result) {
if(resultNumber == 0) {
result = "0"
}
}
return result
}
다른 사람 풀이 분석
프로그래머스 - 박미진 님
import Foundation
func solution(_ X:String, _ Y:String) -> String {
let arr1 = Array(X)
let arr2 = Array(Y)
let uniqueKey = Set(arr1).intersection(Set(arr2))
var answer = ""
for key in uniqueKey.sorted(by: >) {
answer += String(repeating: key, count: min(arr1.filter{$0 == key}.count, arr2.filter{$0 == key}.count))
}
return answer == "" ? "-1" : ((uniqueKey.count == 1 && uniqueKey.contains("0")) ? "0" : answer)
}
굉장히 코드가 이해도 쉽고 심플하여 가져와봤습니다!
정리
요즘 대부분의 문제는 문제를 잘 읽고, 문제에 맞게 잘 구현인거 같습니다!
'알고리즘 & 문제풀이' 카테고리의 다른 글
프로그래머스 - L2 최댓값과 최솟값 (0) | 2023.02.15 |
---|---|
프로그래머스 - L1 기사단원의 무기 (0) | 2023.02.15 |
Queue- 자료구조 (0) | 2023.02.06 |
프로그래머스 - L1 소수 찾기 (0) | 2023.02.06 |
프로그래머스 - L1 콜라 문제 (0) | 2023.02.06 |