틀린 부분이 있다면 언제든지 댓글 남겨주세요!
프로그래머스_정렬 -가장 큰 수
이 문제는 전혀 다른 방향으로 코드를 짜는 바람에 다른 분들의 코드를 참고하여 다시 공부했다 ㅠㅠ
생각보다 너무 짧아서 놀랐다..파이썬은 참 좋은 언어야..
파이썬 공부를 코드 짤때 그때그때 하다보니까 모르는 함수나 문법이 아직도 많다..ㅠㅠ
문제. 0 또는 양의 정수가 담긴 배열 numbers가 주어질 때, 재배치하여 만들 수 있는 가장 큰 수를 문자열로 return
(numbers의 길이는 1 이상 100,000 이하, 원소의 길이는 1,000 이하)
ex) [3, 30, 34, 5, 9] > 9534330 / [6, 10, 2] > 6210
def solution(numbers):
# numbers리스트의 요소 타입을 str로 변경
numbers=list(map(str,numbers))
# 요소의 값을 3자리 이상으로 만들어 내림차순 정렬
numbers.sort(key=lambda x:x*3, reverse=True)
# 정렬한 요소를 문자열로 합침 > 이때 int형태로 한번 변경하여 0000인 경우 0으로 만들어줌
string=str(int("".join(numbers)))
return string
핵심은 lambda함수와 조건에서 주어진 요소의 길이가 1,000이라는 것이다.
*lambda함수: 런타임에 생성해서 사용할 수 있는 익명 함수
sort함수에서 key값을 기준으로 내림차순 정렬(reverse=True)하는데 lambda를 이용하여 요소 값을 바꿔 정렬한다.
문자열에 곱셈을 해주면 3*3=9가 아니라 3*3=333이 된다.
이 성질을 이용하여 요소의 길이가 1000이하이므로 3을 곱해 문자열의 길이를 세자리 이상으로 만들어준다.
그리고 문자열을 비교하면 전체를 비교하는 숫자와 달리 맨 앞자리부터 비교된다.
그래서 303030과 333을 비교하면 333이 더 큰수로 판단된다.
정렬 후, join함수를 이용하여 문자열을 합치고 현재 문자열 형태여서 그대로 return하면 될 줄 알았지만!
[0, 0, 0, 0]인 경우 '0000'으로 출력되기 때문에 int로 한번 형변환 후 str로 형변환하여 return한다.
'Programming language > Python' 카테고리의 다른 글
[CodingStudy] BFS-게임맵 최단거리 (0) | 2021.11.09 |
---|---|
[CodingStudy] 완전 탐색 -소수 찾기 (0) | 2021.08.27 |
[CodingStudy] 신규 아이디 추천 (0) | 2021.08.02 |
[CodingStudy] 숫자 문자열과 영단어 (0) | 2021.07.14 |
Non-ASCII character '\xeb' 오류 (0) | 2020.10.20 |
댓글