본문 바로가기

알고리즘 & 문제풀이

프로그래머스 - L1 숫자 짝꿍

티스토리 게시물 업로드 문제는 좋은 방법을 찾게 되어! 다시 꾸준하게 올리도록 하겠습니다~

설계

맨 처음 문제를 접했을 땐 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)
}

굉장히 코드가 이해도 쉽고 심플하여 가져와봤습니다!

정리

요즘 대부분의 문제는 문제를 잘 읽고, 문제에 맞게 잘 구현인거 같습니다!