Skip to content

Latest commit

 

History

History
16 lines (13 loc) · 1.71 KB

File metadata and controls

16 lines (13 loc) · 1.71 KB

😁 프로그래머스 가장 큰 수

  • Date : 2020.09.26(토)
  • Time : 60분 (시간 초과로 답 봤습니다)

문제

  • 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

코드 풀이

    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x*3, reverse=True)

: 코드를 처음 봤을 때는 이해가 전혀 가지 않았는데 계속 뜯어보니 이해가 간다. 일단 numbers 에 들어간 숫자들이 int형이 아니라 string형이다. 그리고 numbers의 원소를 sort 할 때 x*3 을 해준 이유는 numbers의 원소는 0 이상 1,000 이하 라는 제한사항 때문에 한자리 숫자가 1000 이하가 되는 *3 까지 해주고 비교를 한 것이다. 곱하기 3을 한 다음에 앞자리부터 3자리를 비교한다. 이 때 만약 numbers가 ['6', '10', '2']가 들어있었다면 ['666','101010','222']로 비교하는 것이다. 이렇게 보면 10,6,2 순서로 배열이 되야하는거 아닌가 싶지만 문자열로 바꿔준 이유가 여기있다. 문자열로 바꿔서 x[0] ~ x[2] 까지 비교를 하는것이다. 그렇기 때문에 ['666','101','222']로 비교가 되기 때문에 ['6','2','10'] 으로 정렬이 된다. 포인트가 int 형이 아닌 String형으로 비교를 한다는 것 같다.