일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Operating System
- 정렬
- codeup
- CPU 스케줄링
- 일상
- 백준
- 기초100제
- 리덕스장바구니
- Spring
- Redux
- 자료구조
- 코드업
- web
- 타입스크립트
- 스프링
- react
- 알고리즘
- 공부
- OS
- 토이프로젝트
- 분할메모리할당
- Java
- C++
- 프로그래머스
- error
- react-redux
- 파이썬
- memory
- 협업
- js to ts
- Today
- Total
감자튀김 공장🍟
[프로그래머스/Lv.2] 가장 큰 수 (with 파이썬) 본문
✔ 문제
문제 설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항
- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
https://school.programmers.co.kr/learn/courses/30/lessons/42746
✔ 풀이
오답 코드 (입출력 예제 2번 실패)
def solution(numbers):
answer = ''
for i in range(len(numbers)):
numbers[i] = str(numbers[i])
numbers.sort(reverse=True)
for i in numbers:
answer += i
return answer
오답 코드 2 (TC 11번 - [0, 0, 0, 0])
def solution(numbers):
answer = ''
num_str = []
for i in numbers:
num_str.append(str(i))
num_str.sort(key=lambda x: x*3, reverse=True)
for i in num_str:
answer += i
return answer
정답 코드
def solution(numbers):
num_str = []
for i in numbers:
num_str.append(str(i))
num_str.sort(key=lambda x: x*3, reverse=True)
return str(int(''.join(num_str)))
✔ 설명
1. 숫자 상태에서 정렬을 하지 말고 문자열로 치환
2. 문자열로 변경한 숫자에 3을 곱한 값으로 재정렬
3을 곱하지 않고 정렬 시 사전값으로 정렬은 되나 TC에 맞지 않은 답이 나올 수 있음
ex) [3, 30, 34, 5, 9]을 *3 없이 정렬한다면(reverse=True) 사전 순으로 정렬이 되는데
[9, 5, 34, 30, 3] 과 같이 정렬이 된다. 이를 바로 return 하게 된다면 9534330이 아닌 9534303이 리턴된다.
따라서 *3을 곱하여 [999, 555, 343434, 303030, 333] 을 가지고 정렬을 해야한다.
3. 값을 반환 시 int > str 단계를 거쳐야 한다.
✔ 후기
설명의 1번까지는 해결했으나 [30, 3] 이 순서를 바꾸는 방법을 생각해낼 수 없었다.
그리고 *3을 한 후 제출했더니 TC 11번에서 실패가 떠서 다시 고민했다.
11번의 경우 numbers = [0,0,0,0] 이라 return 값은 0이 나와야한다.
for문을 돌면서 answer += i 를 하면 0000이 return 되기 때문에 설명 3번처럼 num_str을 int로 바꾼 후 str로 다시 변경해야한다.
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스/Lv.2] 다리를 지나는 트럭 (with 파이썬) (0) | 2023.04.03 |
---|---|
[프로그래머스/Lv.2] H-Index (with 파이썬) (0) | 2023.03.24 |
[프로그래머스/Lv.1] K번째수 (with 파이썬) (0) | 2023.03.22 |
[프로그래머스/Lv.2] 프린터 (with 파이썬) (0) | 2023.03.02 |
[프로그래머스/Lv.2] 올바른 괄호 (with 파이썬) (0) | 2023.03.01 |