Skip to content

[Algorithm] 숫자 짝꿍 #53

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{vardict:[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],]varresult:String=""foriin X {dict[String(i)]![0]+=1}foriin Y {dict[String(i)]![1]+=1}foriin 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{varresult:String=""foriin0...9{letx=X.filter({String($0)==String(i)})lety=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
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions