AI 그게 뭔데
끄적끄적 개발일지
AI 그게 뭔데
전체 방문자
오늘
어제
  • 분류 전체보기 (342)
    • 논문 (5)
    • DL(Deep-Learning) (34)
      • 개념 (14)
      • Python 기초 (14)
      • Tensorflow (6)
      • Pytorch (0)
    • NLP (10)
    • OpenCV (53)
    • DevOps (10)
      • AWS (2)
      • Docker & Kubernetes (4)
      • Spark (3)
      • SQL (1)
    • MacOS (1)
    • React-Native (2)
    • BI (3)
      • GA(Google Analytics) (3)
      • Tableau (0)
    • 알고리즘 (221)
      • 백준 (76)
      • 프로그래머스 (108)
      • 기타 알고리즘 (37)

인기 글

태그

  • OpenCV
  • Python
  • 백준
  • level1
  • 프로그래머스
  • 이코테
  • LEVEL2
  • 알고리즘
  • 파이썬
  • 연습문제

최근 글

hELLO · Designed By 정상우.
AI 그게 뭔데

끄적끄적 개발일지

알고리즘/프로그래머스

[프로그래머스/정렬] 가장 큰 수 - Level 2

2022. 1. 20. 23:04
 

코딩테스트 연습 - 가장 큰 수

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰

programmers.co.kr

 

문제 설명

0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.

예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.

0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.

 

 

제한 사항

  • numbers의 길이는 1 이상 100,000 이하입니다.
  • numbers의 원소는 0 이상 1,000 이하입니다.
  • 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.

 

입출력 예

numbers return
[6, 10, 2] "6210"
[3, 30, 34, 5, 9] "9534330"

 


✔ Solution

def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x*3, reverse=True)
    return str(int(''.join(numbers)))

 

⭐ 문제 포인트

 

string은 일반 숫자와 대소비교가 다르기 때문에 가능한 코드!

x * 3 을 해준 이유는 numbers의 원소가 0 - 1000사이의 값을 가지기 때문이다.

 

예를 들어, numbers = [121, 9, 98, 13] 일 경우,

str로 변경하여 리스트로 저장하고 lambda함수를 이용하여 3번 반복하여 나타낸다.

lambda 함수를 거친 후 '121121121'  '999'  '989898'  '131313' 으로 변환된다.

 

변환된 문자열 값을 정렬 할 경우 '121121121' < ' 131313' < '989898' < '999' 이고, reverse = True 이므로 반대로 내림차순으로 정렬이 된다.

 

그 결과 numbers = ['9', '98', '13', '121'] 이 되고  int로 변환 후 join 함수를 이용해 합쳐준다.

(int로 변환하는 이유는 [0, 0, 0] 일 경우 '000' > '0' 으로 나타내주기 위해 사용한다.)

 

그리고 문자열로 return 하라 하였기 때문에 문자열로 바꿔서 return 해준다.

 

 

✔ Solution 2 - 다른 사람 답

import functools

def comparator(a,b):
    t1 = a+b
    t2 = b+a
    return (int(t1) > int(t2)) - (int(t1) < int(t2)) #  t1이 크다면 1  // t2가 크다면 -1  //  같으면 0

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

 

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[2018 KAKAO BLIND] 비밀지도 - Level 1  (0) 2022.01.21
[프로그래머스/완전 탐색] 모의고사 - Level 1  (0) 2022.01.21
[프로그래머스/탐욕법 Greedy] 체육복 - Level 1  (0) 2022.01.20
[월간 코드 챌린지 시즌 1] 두 개 뽑아서 더하기 - Level 1  (0) 2022.01.20
[프로그래머스/해시] 완주하지 못한 선수 - Level 1  (0) 2022.01.20
    AI 그게 뭔데
    AI 그게 뭔데
    공부와 개발 그리고 AI가 약간 첨가된 흔적 남기기

    티스토리툴바