본문 바로가기

알고리즘

[코딩테스트] Level. 1 숫자 짝꿍 (kotlin,코틀린)

728x90

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

 

프로그래머스

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

programmers.co.kr

 

 

숫자 짝꿍 문제는 filter(), 와 contains , sort(), joinToString() 등등 을 사용하면 쉽게 문제가 풀릴 거라고 생각했지만 

이 부분의 개 수에 맞춰서 중복제거를 해줘야 했기 때문에 안타깝게 풀지 못하였다. 

 

내가 풀었던 방식은 이러했는데  위의 이슈 때문에 정답이 아니었다. 

val a = X.toList().filter { Y.toList().contains(it) }.sortedDescending()
if (a.distinct().joinToString("") == "0") return "0"
println(a)
return if (a.isEmpty()) "-1" else a.joinToString("")

 

 

다른 분의 풀이 방법

 

import kotlin.math.min



var answer: String = ""

for (ch in (9 downTo 0).toList().map { it.toString() }) {
    answer += ch.repeat(
        min(
            X.count {
                it.toString() == ch
            },
            Y.count {
                it.toString() == ch
            })
    )
}
if (answer.isEmpty()) answer = "-1"
if (answer.toList().distinct() == listOf('0')) answer = "0"

return answer

 

repeat() 과 min() 을 사용하였는데  repeat()은 해당 숫자 만큼 반복해주는 메서드이고

min() 은 둘 중 더 작을 수를 return 한다고 되어있다. 

 대단하다...