본 게시물은 프로그래머스의 연습 문제 풀이입니다. 저작권은 (주) 그랩에게 있습니다
파이썬 코드
# 가장 큰 수
def solution(numbers):
# 입력받은 숫자를 문자열화
str_numbers = list(map(str, numbers))
# 람다식을 사용하여 정렬
# 숫자가 문자열화 되어있으므로 한자리씩 해당하는 아스키 코드를 비교
# 아스키 코드가 큰 순서대로 오름차순으로 정렬 (default)
# reverse=True를 넣음으로서 내림차순으로 정렬
str_numbers.sort(key=lambda x: x * 3, reverse=True)
return str(''.join(str_numbers))
Comment
처음에는 입력 받은 numbers를 이용해서 순열을 만든 뒤, 만들어진 순열에서 가장 큰 값을 구하는 방식으로 풀려고 했다. 테스트 케이스 2개에서는 통과가 되었으나 채점에서는 시간초과 처리가 되었다.
시간 초과 처리를 피하기 위해서는, 입력받은 숫자를 문자열화 한 뒤, 람다식으로 정렬을 해야한다.
숫자가 문자가 되었을 때도 아스키 코드가 각각 존재한다. 주어진 규칙에서, 300보다 33이 더 큰 수를 만들 수 있다. 이 규칙을 람다식에 적용하기 위해서 문자열이 된 숫자를 세 번 반복한다. 그 결과, 300300300, 333333이 만들어 질 것이다. 문자열 비교는 앞에서부터 하나씩 비교하므로 1번째 인덱스에서 333333이 더 크다는 결과가 나온다. 그리고 큰 수를 만들어 주기 위해서 내림차순으로 정렬되도록 reverse=True를 준다.
Reference
'programming study > Algorithm' 카테고리의 다른 글
[프로그래머스] 더 맵게 - python 풀이 (0) | 2021.06.02 |
---|---|
[프로그래머스] 배달 - python 풀이 (0) | 2021.05.31 |
[프로그래머스] 최댓값과 최솟값 - python 풀이 (0) | 2021.05.28 |
[프로그래머스] 영어 끝말잇기 - python 풀이 (0) | 2021.05.23 |
[프로그래머스] 삼각 달팽이 - python 풀이 (0) | 2021.05.19 |