- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/42746
Lv2 문제이고, 풀다풀다 답 찾아본 문제이다!
디버깅을 통해서 내림차순으로 정렬하면 대충 원하는 순서대로 숫자들이 정렬된다. 근데 예제에서 30과 3을 나열하는 거는 정답을 만족하지 못해서 이를 해결할 방법이 필요했다.
찾아보니 세자리 수 이상으로 자릿수를 맞추어 아스키 코드에 따라 정렬하는 방법이 있다.
numbers의 원소들은 1000이하 이므로, 4자리 수라면 1000 밖에 없고, 그 외에는 최대 3자리 수밖에 안된다. 그렇기 때문에
네번재 자릿수부터의 수로 인한 정렬의 변화는 의미가 없다.(네번째 자릿수가 정렬에 영향을 미친다는 것은 세번째 자릿수까지의 수가 서로 같다는 뜻인데, 이 때는 실제로 둘 다 같은 수 취급이므로 어떻게 정렬되든 상관이 없기 때문이다.)
- 정답 풀이 :
def solution(numbers):
answer = ''
numbers = list(map(str, numbers))
#이렇게 하면 3은 333으로, 30은 303030으로 3 30 순서로 정렬된다
numbers.sort(key = lambda x: x*3, reverse = True)
# 00, 000 같은 경우를 해결하기 위해 형변환
return str(int(''.join(numbers)))
- 시도해본 풀이 :
딱 1 / 3 테스트 성공한 풀이다.
이 경우에 [3, 30, 34, 5, 9]의 경우 9534303을 출력해서 정답인 9534330과 다르게 출력되어 틀린다
3과 30인 경우를 어떻게 해야하나 고민이 되었다
def solution(numbers):
for i in range(len(numbers)):
numbers[i] = str(numbers[i])
numbers.sort(reverse = True)
print(numbers)
return ''.join(numbers)
'프로그래머스 > Level 2' 카테고리의 다른 글
[스택, 큐 / 프로그래머스] 42583번 : 다리를 지나는 트럭 (0) | 2022.10.05 |
---|---|
[완전탐색 / 프로그래머스] 42839번 : 소수찾기 (0) | 2022.10.05 |
[bfs / 프로그래머스] 1844번 : 게임 맵 최단거리 (0) | 2022.10.03 |
[완전탐색 / 프로그래머스] 84512번 : 모음사전 (0) | 2022.09.26 |
[완전탐색 / 프로그래머스] 87946번 : 피로도(다시) (0) | 2022.09.23 |