프로그래머스 | 가장 큰 수 - python

sally·2021년 6월 8일
0
post-thumbnail

첫번째 풀이

각 숫자의 앞자리들만 비교하여 정렬을 하고 싶었다... 하지만 어떻게? HOW? for문을 잔뜩 쓰고 어찌저찌해서 테스트케이스는 통과했지만 제출을 하니 실패가 와르르 떴다. 결국 구글링 고고!!

그렇게 해서 찾은 방법

  • int형 list를 map을 사용해서 string으로 치환한뒤 다시 list로 바꾼다.
  • lambda x : x*3 : 각 인수들을 3번씩 반복한다
  • 문자열 비교는 ASCII값으로 치환되어서 정렬된다.
    -> '666' '101010' '222'의 첫번째 인덱스 값으로 비교한다!
  • 6 = 86, 1=81, 2=82 이므로, 내림차순으로 정렬하면 6 2 10이 된다.

너무 간단하고 깔끔한 방법에 감탄하면서 제출을 하니까 마지막 테스트케이스를 통과하지 못했다...!! 🤷‍♀️

def solution(numbers):
    answer = ''
    
    str_list = list(map(str,numbers))
    
    for i in sorted(str_list, key = lambda x : x*3, reverse=True):
        answer += i
        
    return answer

두번째 풀이

만약 0000이 들어온다면 0이 return 되어야 하는데, 내 풀이는 0000이 return된다. 문자열을 더한 후 int로 변환하고 다시 문자열로 변환해주어야 한다!

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

profile
Believe you can, then you will✨

0개의 댓글