본문 바로가기

알고리즘/프로그래머스

프로그래머스 - 가장 큰 수(Level 2)/Wanna Be 컴잘알

728x90

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/42746?language=python3

 

프로그래머스

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

programmers.co.kr

-문제-

 

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

제한 사항

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

입출력 예

numbersreturn

[6, 10, 2] 6210
[3, 30, 34, 5, 9] 9534330

 

-설명-

 

1. 예를들어 12, 121 이면, 12가 앞에 121이 뒤인 12121가 12112보다 크다. 

   예를들어 40, 404 이면, 404가 앞에 40이 뒤인 40440가 40404보다 크다.

   이처럼 앞자리도 중요하지만 끝자리가 어떤 값인지에 따라 큰 값이 달라진다.

2. 따라서 해당 수를 반복시켜 자릿수를 맞춰주도록 하겠다. 최대 3자리 이므로 숫자를 문자로 바꾸고 *3을 해준다.

   ex) 6-> "666",  10-> "101010"

3. 정렬한 뒤에 모두가 "0000"이런 경우에 대비해 예외상황을 준다.

 

-테스트 케이스 제공-

 

-코드-

def solution(numbers):
    answer=""
    numberStr=[]
    for i,value in enumerate(numbers):
        st = str(value)
        stri = st*3
        numberStr.append([stri,i])

    numberStr.sort(reverse=True)
    for i,value in enumerate(numberStr):
        index = value[1]
        answer += str(numbers[index])


    for value in answer:
        if value!='0':
            return answer

    return "0"

 

 

728x90