프로그래머스 문제풀이
가장 큰 수_정렬_Javascirpt
codermun
2021. 8. 8. 17:18
728x90
JS
파이썬처럼 생각하면서 JS로 풀면 더 어려웠음
function solution(numbers) {
var answer = '';
// a = 6. b = 10 인경우를 생각
// 숫자로 정렬하면 [10, 6, 2] 가 되는데 문자열로 정렬하여 [6, 2, 10]가 되도록 만들어야함
answer = numbers.sort((a, b) => `${b}${a}` - `${a}${b}`).join('')
// 0 인 경우 예외처리 && 문자열로 정렬햇기에 내부 번호들이 문자로 변경됨에 따른 "0"비교함
return answer[0] === "0" ? "0" : answer
}
Python 풀이
def solution(numbers):
answer = ''
# numbers의 원소인 1000이하 숫자 비교를 위해 모두 4자리를 만족시켜준다.
box = list(map(str, numbers))
"""
x*4을 하는 이유? -> num의 인수값이 1000 이하이므로 4자리수로 맞춘 뒤, 비교하겠다는 뜻.이 문제의 핵심이라고 할 수 있다.
문자열 비교는 ASCII 값으로 치환되어 정렬된다. 따라서 6666, 10101010, 2222의 첫번째 인덱스 값으로 비교한다.
6 = 86, 1 = 81, 2 = 82 이므로 6 > 2 > 1순으로 크다.
"""
box.sort(key=lambda x: x*4, reverse=True)
#바로 join(box)를 할 경우 숫자 0에 대해 엉뚱한 값이 나올 수 있기 때문으로 추측
return str(int("".join(box)))
728x90