선발대

[스파르타] 99클럽 2기 코테스터디 7일차 TIL / 가장 큰 수 본문

스파르타코딩클럽/활동 내용

[스파르타] 99클럽 2기 코테스터디 7일차 TIL / 가장 큰 수

신선한 스타트 2024. 5. 26. 18:52

프로그래머스: 가장 큰 수 (링크)

가장 큰 수

 

주어진 리스트를 문자열로 변경해서 내림차순으로 정렬하는 것까지는 생각했는데 내 경우에는 lambda: x: (x[0], x[1], x[2]) 이런 식으로 작성했기 때문에 '3' ,'34'인 경우에는 인덱스 에러가 나왔다. 결국 풀이를 참고했는데 엄청 간단했다. 주어진 리스트를 문자열로 변경하고 lambda 함수로 x * 3을 적용하게 되면 '3'은 '333', '34'는 '343434' 로 변경되고 그걸 기준으로 reverse=True 내림차순으로 정렬되므로 쉽게 구할 수 있다.

 

x * 3을 하는 이유는 주어지는 numbers의 원소가 1000 이하의 수이기 때문이다. '3'과 '334'를 비교할 때 앞의 3자리만 비교하면 되므로 x * 3을 해서 각각 '333', '334334334'으로 변경 후 사전순으로 정렬하면 된다.

 

## 나의 풀이
def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x * 3, reverse=True)
    return str(int(''.join(numbers)))
    
    
## 다른 사람의 풀이
import functools

def comparator(a,b):
    t1 = a+b
    t2 = b+a
    #  t1이 크다면 1  // t2가 크다면 -1  //  같으면 0
    # 양수 리턴: input 위치 바꾸기, 음수 리턴: input 위치 그대로 
    return (int(t1) > int(t2)) - (int(t1) < int(t2)) 

def solution(numbers):
    n = [str(x) for x in numbers]
    n = sorted(n, key=functools.cmp_to_key(comparator), reverse=True)
    answer = str(int(''.join(n)))
    return answer

오늘 미들러 풀이 끝!


참고한 풀이: https://school.programmers.co.kr/learn/courses/30/lessons/42746/solution_groups?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

참고한 블로그: https://geunuk.tistory.com/68

 

[Python] cmp_to_key() - 원하는 기준으로 sort() (정렬) 하기

https://programmers.co.kr/learn/courses/30/lessons/42746 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가

geunuk.tistory.com

 

 

Comments