🗂️ 문제
링크: https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
💡 접근법
numbers 리스트 내 값들의 자릿수를 3자리로 맞춘다. 자릿수를 맞출 때 부족한 자릿수만큼 첫 번째 자리에 해당하는 수로 채운다.
즉 numbers=[3, 30, 34, 5, 9] → numbers=[333, 303, 343, 555, 999]가 된다.
이를 정렬하면 numbers = [999, 555, 343, 333, 303]이다. 이것의 원래 값을 이어붙여서 출력하면 answer = “9534330”이다.
하지만 위의 해결방식에는 numbers=[3, 30, 303]라는 반례가 존재한다.
위의 방식대로 적용할 경우 정렬 결과는 numbers=[333, 303, 303]이 된다. 이때 동일한 값이 존재하기 때문에 우선순위를 지정해야 한다. 즉 원래 값을 두 번째 정렬 조건으로 지정한다. 즉 정렬 결과는 numbers=[333(3), 303(303), 303(30)]이다. 이를 출력하면 answers=”330330”이 된다.
하지만 이 방식 또한 numbers=[14, 141]라는 반례가 존재한다.
따라서 부족한 자릿수를 값의 첫 번째 자리로 채우는 것이 아니라 값을 3번 반복하는 방식을 통해 채워야 한다.
즉 numbers=[14, 141] → numbers=[141414, 141141141]이 되고, 이를 정렬하면 numbers=[141414, 141141141]이고 answer=”14141”이다.
😎 내 코드
- 시도 1 - 반례: [3, 30, 303]
def solution(numbers):
answer = ''
new_n = []
for num in numbers:
s_num = str(num)
digit4_num = s_num + s_num[0] * 3
new_n.append((s_num, digit4_num))
new_n.sort(key=lambda x: (x[1]), reverse=True)
for n in new_n:
answer += n[0]
return answer
- 시도 2 - 반레: [14, 141]
def solution(numbers):
answer = ''
new_n = []
for num in numbers:
s_num = str(num)
digit4_num = s_num + s_num[0] * 3
new_n.append((s_num, digit4_num))
new_n.sort(key=lambda x: (x[1], x[0]), reverse=True)
for n in new_n:
answer += n[0]
return answer
👀 배운 코드
def solution(numbers):
answer = ''
numbers = list(map(str, numbers))
numbers.sort(key=lambda x: x*3, reverse=True)
answer = ''.join(numbers)
return str(int(answer))
return 시 str(int(answer))을 하는 이유는 [0, 0]에 대한 반례를 해결하기 위함이다.
🧐 배운 점
- numbers 리스트 내 요소 str로 변환
numbers = list(map(str, numbers)) - 정렬할 대상이 되는 리스트를 새로 생성하지 않고 lambda 식 안에서 정렬할 값을 생성한 뒤 정렬
numbers.sort(key=lambda x: x*3, reverse=True) - 리스트 내 문자열 하나로 합치기
answer = ''.join(numbers)
🔗 Reference
[프로그래머스] 가장 큰 수(python)
문제 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장
liveloper-jay.tistory.com
'Algorithm > Programmers' 카테고리의 다른 글
[완전탐색] 프로그래머스 Lv2. 카펫 - Python (0) | 2024.03.21 |
---|---|
[완전탐색] 프로그래머스 Lv1. 모의고사 - Python (0) | 2024.03.19 |
[힙] 프로그래머스 Lv2. 더 맵게 - Python (0) | 2024.03.07 |
[스택/큐] 프로그래머스 Lv1. 같은 숫자는 싫어 - JAVA (0) | 2024.02.19 |
[SQL] 프로그래머스 SELECT 문제 풀이 (1) | 2024.02.19 |