Skip to content

[Algorithm] 숫자 짝꿍 #53

@hwangJi-dev

Description

@hwangJi-dev

💬 문제

[코딩테스트 연습 - 숫자 짝꿍](https://school.programmers.co.kr/learn/courses/30/lessons/131128)


💬 Idea

  1. 풀이 방법
    1. dict의 0번째 인덱스에 X에 포함된 key의 개수가 업데이트 될 수 있도록 한다. Y는 1번째 인덱스에.
    2. dict는 딕셔너리이므로 정렬되지 않는다는 특성이 있다. 따라서 딕셔너리의 key값을 정렬하여 해당 key값을 value값만큼 반복하여 result에 더한다.
    3. 이미 정렬된 문자열이 도출되었으므로 빈 문자열일 경우, 0이 여러번 반복되는 경우만 따로 처리해주어 최종 결과값을 도출한다.
  2. 풀이 방법
    1. 0부터 9까지 for문을 돌리며 X 문자열, Y 문자열 각각에 포함된 0~9 숫자를 뽑고 해당 array들의 최솟값을 뽑아서 result에 append한다.
      1. ex) X = “1000”, Y = “21000”
        1. 0 → x = [”0”, “0”, “0”]
          y = [”0”, “0”, “0”]

           min.count = 3 이므로 result에 000이 더해진다.
          
        2. 1 → x = [”1”]
          y = []
          min.count = 0 이므로 result에 아무 값도 더해지지 않는다.

    2. 가장 큰 정수를 도출하기 위해 result 문자열을 내림차순으로 정렬한다.

💬 풀이

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
}

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions