티스토리 뷰

728x90
반응형

프로그래머스) 숫자 짝꿍 - Level1

https://school.programmers.co.kr/learn/courses/30/lessons/131128

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import Foundation

func solution(_ X:String, _ Y:String) -> String {
    // x 와 y 의 임의의 자리에서 공통으로 나타나는 정수 k
    // k 를 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라고 한다.
    var x: [String] = X.sorted(by: >).map { String($0) }
    var y: [String] = Y.sorted(by: >).map { String($0) }
    var array: [String] = []
    
    while !(x.isEmpty || y.isEmpty) {
        let firstX: String = x.removeFirst()
        
        for n in 0..<y.count {
            if firstX == y[n] {
                array.append(firstX)
                y.remove(at: n)
                
                break
            } else if firstX > y[n] {
                break
            } else {
                // firstX < y[n]
                continue
            }
        }
    }
    
    if array.count == 0 {
        return "-1"
    } else {
        array.sort(by: >)
        
        return String(Int(array.joined())!)
    }
}

// 테스트 케이스 6-10번 실패.
// 테스트 케이스 11-15 시간 초과.
// 47.4/100

import Foundation

func solution(_ X:String, _ Y:String) -> String {
    // x 와 y 의 임의의 자리에서 공통으로 나타나는 정수 k
    // k 를 이용하여 만들 수 있는 가장 큰 정수를 두 수의 짝꿍이라고 한다.
    var x: [String] = X.map { String($0) }
    var y: [String] = Y.map { String($0) }
    var xArray: [Int] = Array(repeating: 0, count: 10)
    var yArray: [Int] = Array(repeating: 0, count: 10)
    var answers: [String] = []
    
    // array 에 0-9 까지의 숫자 갯수 설정.
    
    for index in 0..<x.count {
        xArray[Int(x[index])!] += 1
    }
    
    for index in 0..<y.count {
        yArray[Int(y[index])!] += 1
    }
    
    // array 를 비교하여 answer 작성.(9->0 순서로 탐색하면 sort 하는 시간복잡도 제거 가능.)
    
    for key in (0..<10).reversed() {
        if xArray[key] != 0 && xArray[key] != 0 {
            for _ in 0..<min(xArray[key], yArray[key]) {
                answers.append(String(key))
            }
        }
    }
    
    if answers.count == 0 {
        return "-1"
    } else if answers[0] == "0" {
        return "0"
    } else {
        return answers.joined()
    }
}

print(solution("5525", "1255"))
// 552

print(solution("000", "00"))
//0

 

 

 

728x90
반응형
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
«   2025/01   »
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 31
링크
Total
Today
Yesterday