[프로그래머스] 가장 큰 수 _ 파이썬

메링·2021년 6월 2일
0

알고리즘 문제

목록 보기
3/22

어떻게 매번 자리수를 잘라서 비교하지..? 를 고민하고 고민하다가 결국 포기하고 다른 분들의 풀이를 봤다...

보자마자 황당하고.. 멋지고... 코드가 진짜 경이롭네

def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key = lambda x: x*3, reverse=True)
    return str(int(''.join(numbers)))

string 으로 바꿔서 비교할 생각은 했었는데.. 그걸 x*3으로 해결하다니 천재다.

  1. map 사용해서 list의 원소들을 string으로 변환하게 매핑하고, list로 리턴
  2. lambda x : x*3 -> num 인자 각각의 문자열을 3번 반복
  • x*3을 하는 이유? -> num의 인수값이 1000 이하이므로 3자리수로 맞춘 뒤, 비교하겠다는 것.
    9, 991 이면 9를 2번 반복해도 99, 991로 여전히 991이 더 앞편에 정렬되기 때문.
  1. 문자열을 비교해서 정렬
    문자열 비교는 ASCII 값으로 치환되어 정렬.
    따라서 666, 101010, 222로 생각하면 첫번째 값으로 비교.
    6 = 86, 1 = 81, 2 = 82 이므로 1 < 2 < 6 순.
  2. 내림차순으로 정리하기 위해 reverse = True
  3. ''.join(num)로 문자열을 합치기
  4. int로 변환한 뒤, 다시 str로 변환
    모든 값이 0일 때(예>'000')를 처리해주기 위해서.
profile
https://github.com/HeaRinKim

0개의 댓글