프로그래머스 문제풀이

가장 큰 수_정렬_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