-
[Solv:프로그래머스] 정렬 - 가장 큰 수 파이썬으로 풀기비전공자 공부일기/:: ALGORITHM 2021. 10. 11. 13:18
문제설명
0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요.
예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다.
0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.
제한 사항- numbers의 길이는 1 이상 100,000 이하입니다.
- numbers의 원소는 0 이상 1,000 이하입니다.
- 정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.
내가 작성했던 의사코드
** keypoint **
1) 맨 앞자리 수가 가장 큰 순서대로 정렬한다
2) 맨 앞자리 수가 같은 경우, 그 다음자리 수를 비교한다. 이를 반복한다.
3) 순서대로 answer에 이어붙인다그런데 1), 2), 3)를 구현하는 게 너무 빡셌다.
머리를 싸매다가 생각난 하나의 아이디어....'어...? 이거 다 String으로 만들어주고 정렬하면 자동으로 되잖아?
그렇다. 문자열일 때의 크기비교는 150 < 92 이므로,
문자열로 바꿔주고 정렬시키면 저거 다~ 해결되는 거였음그러고 나서 룰루랄라 제출 돌렸더니
테스트 케이스에서 막히는 게 있었음
"만약 한 자리 수의 경우, 비교할 대상의 두 번째 자리의 수가 첫 번째 자리 수보다 작다면 한 자리 수가 더 앞 순서다"두구둥.... 요거 어케풀지 하다가
화니가 아 이거 ?!?!? 넘버 이용하는거네 하고 알려줌
지금 상태로 비교하면 명확하지 않은 부분이 있으니
같은 수를 3번 반복한 형태로 치환한 후 비교해주는 것그런데 소스구현 어케할지 막막해서
이번에는 치트키 써서 해답 보기로 함보길 잘했음. 내가 잘 몰랐던 람다함수 이용해야 했었음
def solution(numbers): answer = '' numbers = list(map(str, numbers)) numbers.sort(key = lambda x:x*3, reverse = True) answer = str(int(''.join(numbers))) return answer
음... 일단 string으로 바꿔놓고 비교해주는 나의 아이디어가 맞았다는 거에
스스로에 대한 치얼스를 한번 해주고(개쪼렙 레벨임 ㅋㅋㅋㅋㅋ)
일단 하나 배워간다.참 주말에 화니와 나의 공부방법에 대한 견해차이가 있었음.
화니는 막히는 모~든 부분을 스스로 뚫어가면서 배워나가는 타입이었고
나는 시도할 만큼 해본 뒤 안 되는 부분은 검색 등으로 해결해봐야 할 필요도 있다고 주장그런데 일단 화니는 컴공 석사고; 나는 CS지식, 알고리즘 지식이 한~참 부족한 쪼쪼렙
지금 단계에서 머리 싸맸다고 람다 함수를 알게됐을 것 같진 않았다.
이런 건 발상의 문제가 아니라 있는 것을 있는줄도 모르는 영역이기 때문에무튼 나는 내 방식대로 간다.
그래도 도움주는 화니님 감사합니다.'비전공자 공부일기 > :: ALGORITHM' 카테고리의 다른 글
[Solv:프로그래머스] SQL JOIN - 보호소에서 중성화한 동물 (0) 2021.10.11 [Solv:프로그래머스] SQL JOIN - 오랜 기간 보호한 동물(1) (0) 2021.10.11 [Solv:프로그래머스] 정렬 - K번째 수 파이썬으로 풀기 (1) 2021.10.11 [Solv:Codility] 코딜리티 Lession1 - Iterations (반복문) binary gap 자바 (0) 2021.07.25 [인프런 알고리즘] 섹션2. 정렬(Sorting) - (3)삽입정렬 (0) 2020.03.08