문제링크 : 코딩테스트 연습 - 가장 큰 수 | 프로그래머스 (programmers.co.kr)

풀이 방법
처음 풀이할 때에는 모든 숫자를 문자열 형태로 변환하고, 변환된 문자열의 길이를 판단하여 길이가 더 길면서 앞 자리 숫자가 같으면 비교 후 정렬하는 방식을 사용하려고 했다. 하지만 채점할 때 예외 케이스가 있는지 통과하지 못했다.
그리고나서 다른 풀이 방법을 찾이 못하고 있을 때, 모든 자리수를 똑같이 만들어서 비교하면 된다는 힌트를 받고 풀 수 있었다.
나의 풀이
풀이 확인
def solution(numbers):
answer = []
length = max([len(str(x)) for x in numbers])
numbers = [(int((str(x)*length)[:length]), len(str(x))) for x in numbers]
numbers = sorted(numbers, key=lambda x: (-x[0], x[1]))
for n, c in numbers:
answer.append(str(n)[:c])
return str(int(''.join(map(str, answer))))
내가 풀이한 코드는 한눈에 보기 어렵고 반복문이 여러번 반복되어 낭비된다는 느낌이 드는 코드이다.
다른 사람 풀이
풀이 확인
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key=lambda x: x*3, reverse=True)
return str(int(''.join(numbers)))
다른 사람이 짜둔 코드를 보고 또 한 번 배우게 되었다.
문자열을 3번 반복하여 1 ~ 1000까지의 숫자를 비교 할 수 있도록 만들었다.
파이썬에서 문자열을 정렬하면 맨 앞 글자부터 아스키코드를 비교하여 작은 순서대로 정렬해준다. 그리고 첫 글자가 똑같으면 다음 글자를 비교하는 형태이다.
'알고리즘 > problem solving' 카테고리의 다른 글
| [프로그래머스] level2 스킬트리 (0) | 2021.04.16 |
|---|---|
| [프로그래머스] level2 완전탐색 카펫 (0) | 2021.04.15 |
| [프로그래머스] level2 완전탐색 소수찾기 (0) | 2021.04.15 |
| [프로그래머스] level2 힙 더 맵게 (0) | 2021.04.14 |
| [프로그래머스] level2 정렬 H-Index (0) | 2021.04.14 |