[프로그래머스(Ruby)] 2. 가장 큰수

📌 Level2 가장 큰수

💻 사용언어 : Ruby

🗒️ 문제설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

제한 사항
numbers의 길이는 1 이상 100,000 이하입니다.
numbers의 원소는 0 이상 1,000 이하입니다.
정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

input
numbers = [6, 10, 2] => "6210"
numbers = [3, 30, 34, 5, 9] => "9534330"

✏️ 해결 코드

def solution(numbers)
    number_permutations = numbers.permutation(numbers.length).to_a
    answer = number_permutations.map(&:join).map(&:to_i).max.to_s
    return answer
end

위의 코드가 runtime error가 나와서 아래와 같이 수정해 보았다.

def solution(numbers)
    return numbers.permutation.map(&:join).uniq.max
end

테스트 코드는 통과하지만 시간 초과가 나여 코드를 다시 수정해 보았다

def solution(numbers)
    results = numbers.map(&:to_s).sort { |a, b|
      a = a.length == 1 ? a * 3 : a
      a = a.length == 2 ? a + "0" : a
      b = b.length == 1 ? b * 3 : b
      b = b.length == 2 ? b + "0" : b
      b <=> a
    }
    return results.join
end

위의 코드로 하면 시간초과에 대한 Error는 나오지 않지만
정답율은 40에 가깝다...
아직 조금 더 생각해보고 해보는 것이 좋을 것 같다.

과제 1
[40, 403] => 40403
[1000, 0, 5, 99, 100] => "99510010000"
[0, 5, 10, 15, 20] => "52015100"

해결하기

썸네일 참조 : https://www.klipfolio.com/blog/algorithm-in-six-steps

좋은 웹페이지 즐겨찾기