728x90
Overview
- 체감 난이도: ★★★☆☆
- 문제 레벨: Lv.2
- 문제 유형: 정렬
- 풀이 상태: 답안참고 / 스스로 해결
- 추후: 다시 풀어보기 / 간단 복습 / 완벽 이해
[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/42746
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[코드]
처음 풀이: permutations(순열)로 풀었다. 시간 초과가 날 것 같았는데, 예상대로였다.
더보기
from itertools import permutations as p
def solution(numbers):
answer = ''
st = list(map(str, numbers))
st = sorted(st, key=lambda x:x[0], reverse=True)
answer += st[0]
st.pop(0)
nPr = list(p(st, len(st)))
x = []
for i in range(len(nPr)):
tmp = ''.join(nPr[i])
x.append(tmp)
x.sort(reverse=True)
answer += x[0]
return answer
[정답코드]
from functools import cmp_to_key
def compare(a, b):
if a + b > b + a:
return -1
else:
return 1
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key=cmp_to_key(compare)) # 맞춤형 비교 함수로 정렬
answer = ''.join(numbers) # 정렬된 숫자들을 이어 붙임
return str(int(answer)) # 결과가 '000...'인 경우 '0'으로 변환
from functools import cmp_to_key
맞춤형 비교 함수를 정렬에 사용할 수 있도록 변환해주는 도구
: python3에서 더 이상 사용되지 않는 비교 함수 cmp를 지원하기 위해 사용된다.
[동작 과정]
numbers.sort(key=cmp_to_key(compare))
ex: [6, 2, 10]
6과 2를 붙여서 62와 26을 비교한다. 62가 더 크므로 compare("6", "2")는 -1을 반환한다. (6이 2보다 앞에 온다는 의미)
[다른 사람 풀이]
def solution(numbers):
numbers = list(map(str, numbers))
numbers.sort(key=lambda x: x*3, reverse=True)
return str(int(''.join(numbers)))
✓ lambda x: x*3 이 부분이 어떻게 동작하는지?
1. x가 문자열인 경우
- x * 3 은 문자열을 세 번 반복해서 새로운 문자열을 생성한다.
2. 문자열 비교 방법
- 컴퓨터에서 문자열을 비교할 때는 사전순으로 비교한다.
3. 왜 3번 반복하는가?
- 자릿수가 다른 숫자들을 비교할 때 일관성을 유지하기 위함
ex) ['6', '10', '2']
'6' * 3 = '666' / '10' * 3 = '101010' / '2' * 3 = '222'
→ 정렬된 후, ['6', '2', '10']
반응형
'🚩 Coding Test > Programmers' 카테고리의 다른 글
[Programmers][Python] 네트워크 (0) | 2024.10.16 |
---|---|
[Programmers][Python] Lv.2 타겟 넘버 (1) | 2024.10.16 |
[Programmers][Python] Lv.2 베스트앨범 (1) | 2024.10.11 |
[Programmers][Python] Lv.1 가장 많이 받은 선물 (0) | 2024.09.30 |
[Programmers][Python] Lv.1 추억 점수 (0) | 2024.08.07 |