프로그래머스 2단계 "가장 큰 수"

sanha_OvO·2021년 7월 2일
0

Algorithm

목록 보기
70/84

문제

프로그래머스 '가장 큰 수'


풀이

기본적인 문제의 풀이는 간단하다.
어떻게 이어붙이든 만들어진 수는 모두 같은 자리수를 가지고 있으니 앞자리가 큰 수부터 순서대로 이어붙이면 된다.

파이썬에서 sorted() 혹은 .sort()로 문자열을 정렬할 때, 아스키 코드값에 기반하여 첫째 자리수부터 비교를 시작한다.

다만 서로 다른 자리수의 수를 이어붙일 때 비교에 문제가 생기는데, 문제에서 각 원소는 0이상 1000 이하라는 점을 명시해놨으니 람다를 이용하여 x*3(파이썬에서 문자열에 곱연산을 하면 반복해서 이어붙인다)을 한 후 비교를 해주면 된다.

마지막에 문자형을 int로 바꾼 뒤 다시 str로 바꿔주는 이유는 numbers의 모든 원소가 0일 경우를 대비해서이다.
만약 numbers = [0, 0, 0]일 경우 연산 결과가 '000'이므로 '0'으로 표현하기 위해 형을 int로 바꿔준뒤 문제에서 원하는 반환값의 형인 str로 바꿔주는 것이다.


Python 코드

def solution(numbers):
  numbers = list(map(str, numbers))
  # 람다를 이용하여 x(0이상 1000이하)
  # 큰 값부터 찾기 위해서 reverse = True
  answer = sorted(numbers, key=lambda x: x*3, reverse = True)

  # 구성요소가 모두 0으로 이루어져 있을 경우 한자리 수 0으로 반환하기 위해 int로 변환 후, 다시 str로 변환
  return str(int(''.join(answer)))
profile
Web Developer / Composer

0개의 댓글