본문 바로가기

Algorithm/프로그래머스

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

https://school.programmers.co.kr/learn/courses/30/lessons/42746

 

프로그래머스

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

programmers.co.kr

 

 

1. 해결방법

가령 [3,300,31,387] 라는 숫자 리스트가 있다면 가장 큰 조합은 --> 387 3 31 310 이다. 

가장 작은 수가 3 이더라도, 첫째자리 숫자 "3"은  310 31 의 두번째 자리 숫자 "1" 보다 크기 때문에, 3은 310 31 보다 앞에 나온다. 

또 31은 31의 두번째 자리숫자 "1" 이 310 의 세번째 자리 숫자 "0" 보다 크기 때문에, 310 보다 앞에 나온다. 

3 >31, 310 31 >310
3 
31
310
31
310

따라서 비교 하는 숫자들의 자리수를 맞춰?서 비교를 해보기 위해 문자열 곱셈을 하여 숫자의 길이를 늘렸다. 

3 ----> 3 3 3
3 -->  3 1 3 1 3 1
310 -> 3 1 0 3 1 0 3 1 0

 

3번씩 써서 늘리는 이유는 문제 조건에서 입력되는 숫자의 최대 크기가 1000미만이라 제시했기 때문이다.

따라서 입력되는 숫자의 최소길이는 1자리 최대길이는 3자리 일것이고, 1자리 숫자를 3자리로 불려줌으로써 

문자형태의 숫자를 대소비교한다.

 

2. 정답코드

def solution(numbers):
    answer = ''
    numbers = list(map(str, numbers))
    numbers.sort(key = lambda x:x*3, reverse=True)
    answer = str(int(''.join(numbers)))
    return answer
진짜,,, 하면서 머리카락 빠질만큼 스트레스를 받았다...
람다 공부 확실히 해야겠다. 그리고 1000이하라는 키워드로 정말 많이 틀렸다.

 

 

 

 

 

[참고]

https://huidea.tistory.com/4