[프로그래머스(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
Author And Source
이 문제에 관하여([프로그래머스(Ruby)] 2. 가장 큰수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jinsu6688/프로그래머스Ruby-2.-가장-큰수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)