상세 컨텐츠

본문 제목

[프로그래머스] 가장 큰 수

코딩테스트/연습문제

by 2^7 2022. 8. 24. 13:57

본문

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

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

제한 사항

  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

풀이

  1. 가장 큰 수를 만들기 위해선 주어진 숫자의 제일 앞자리가 큰 순으로 정렬한다.
  2. 주어진 숫자를 문자열 형태로 변환
  3. 문자열을 곱한 후 문자열을 3번 곱한 값을 기준으로 정렬한다.                                                                                      (문제의 제한 사항에 원소가 1,000이하 라는 조건을 고려해야 하기 때문이다.)                                                            (문자열 정렬의 경우 아스키 코드 기준으로 앞자리 부터 인덱스를 순차적으로 비교하여 정렬하기 때문                     ex,) 문자열 2를 3번 곱하면 222, 문자열 221을 3번 곱하면 221221221이지만 3번째 인덱스가 2인 222이 더 크다고 인식된다.)
  4. 정렬된 리스트를 문자열로 바꾼 뒤 정수로 변환하고 다시 문자열로 변환(0001을 0으로 표시하기 위해서)

코드

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

 

728x90

관련글 더보기