문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42746
문제의 해결 방법
- 빈 문자열로 수를 초기화한다.
- 가장 크게 만들 수 있는 수를 고른다.
- 그 수를 현재 수에 이어 붙인다.
- 모든 수를 다 사용할 때까지 반복한다.
(조금 나은) 문제의 해결 방법
- 빈 문자열로 수를 초기화한다.
- 수의 목록을(크게 만드는 것 우선으로) 정렬한다.
- 목록에서 하나씩 꺼내어 현재 수에 이어 붙인다.
- 모든 수를 다 사용할 때까지 반복한다.
알고리즘 설계 -> 구현
- 대소 관계 비교를 위한 기준을 마련
- 이것을 이용하여 주어진 배열을 정렬
- 정렬된 배열을 이용하여 문자열 표현을 완성
- 문자열을 정렬할 때
- 원소의 값은 $0 \leqq x \leqq 1000$ 이므로
- 문자열을 4배 길이로 늘려준다음 문자형변환을 통해 사전순으로 비교해주면 편하다.
- 예를들어 3 과 343인 경우 3은 3333이 되고 343은 343343343이지만 3433 까지 확인하면 된다. 이 경우에 정렬하게 되면 사전순서상 343343343이 먼저 나오게 된다.
def solution(numbers):
numbers = [str(x) for x in numbers]
numbers.sort(key=lambda x: (x*4)[:4], reverse=True)
return str(int(''.join(numbers)))
'프로그래머스 AI 데브코스 5기 > CS' 카테고리의 다른 글
동적계획법(Dynamic Programming) 대표 문제 풀이 - N으로 표현 (0) | 2023.03.16 |
---|---|
힙(Heap) 대표 문제 풀이: 더 맵게 (0) | 2023.03.16 |
탐욕법(Greedy) 대표 문제 풀이: 체육복 (0) | 2023.03.15 |
힙 - Heaps (1) | 2023.03.15 |
이진 탐색 트리(Binary Search Trees) (0) | 2023.03.14 |