새벽_나그네
12시 지난 새벽
새벽_나그네
전체 방문자
오늘
어제
  • 분류 전체보기
    • TIL
    • DevLog
    • Algorithm
    • ComputerScience
    • etc

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 스파르타코딩클럽
  • 개발일지
  • docker
  • TodayILearned
  • 자기주도학습
  • 코딩프로젝트
  • Python
  • 내일배움카드
  • Github
  • portfolio
  • Selenium 4
  • til
  • 내일배움단
  • 국비지원
  • 코린이
  • 코딩
  • 내일배움캠프
  • AI트랙
  • 프로그래머스
  • machine learning

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
새벽_나그네
Algorithm

[프로그래머스] 코딩테스트 연습정렬 가장 큰 수

Algorithm

[프로그래머스] 코딩테스트 연습정렬 가장 큰 수

2022. 7. 31. 19:06

문제

문제 설명

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

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

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

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

 

입력 & 출력

입출력 예

numbersreturn

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

새로 사용한 함수

sort 함수를 lambda 식과 함께 사용 

예시는 밑과 같으며 키값으로 사용하는 lamda x를 옆의 매개변수 부분의 함수를 수행하여 저장하고 이를 기준으로 정렬을 수행 내림차순 정렬을 위하여 sort함수에 reverse 조건에 true를 주었다.

# sort 함수
keys.sort(key = lambda x: x['key'])
# [{'key': 3}, {'key': 5}, {'key': 8}, {'key': 9}]

join

구분자를 넣어서 문자열을 가공할때 사용 밑의 코드에서는 아무것도 넣지 않는 것으로 ''을 사용하였으므로 배열의 각각의 문자 사이에 아무것도 넣지 않고 문자열을 만들어줌

 

풀이 과정

처음 문제를 접하고 풀어나갈때는 배열에 저장된 문자열의 길이를 기준으로 각각의 배열을 만들고 첫 번째 숫자를 비교하는 방식의 로직을 만들었지만 제대로 구현되지 않아서 기존에 풀이를 한 사람들의 코드를 참고하였다. 

1. 이 문제의 핵심은 배열에 들어오는 숫자가 여러자리 숫자일 수 있지만 1000의 자리 숫자를 넘지 않는다는 것이 핵심이다 

2. 1번내용을 생각하면서 모든 배열의 숫자에 *3을 해주면서 이것을 기준으로 정렬을 하는 방식을 취한다. 여기서 숫자에 *3이라고 표현하였지만 문자열에 *3을 해주기 때문에 같은 문자열이 3번 반복되는 형태를 취하게 될 것이며 문자열을 정렬하기 때문에 숫자의 크기가 아닌 문자열을 기준으로 정렬되게 될 것이다.

3. 2번처럼 가공된 값을 사용하여 정렬을 하게 되지만 이는 임의의 key 값으로 사용되는 것이며 배열에 있던 숫자를 나타내는 문자열의 밸류를 그대로 사용하기 때문에 return시에 이 숫자들을 다 join 시켜주면 원하는 값을 얻게 된다.

 

코드

def solution(numbers):
    numbers = list(map(str, numbers))
    numbers.sort(key=lambda x: x * 3, reverse=True)
    return str(int(''.join(numbers)))
저작자표시 비영리 변경금지 (새창열림)

'Algorithm' 카테고리의 다른 글

[프로그래머스] 코딩테스트 연습정렬 K번째수  (0) 2022.08.02
[프로그래머스] 코딩테스트 연습2018 KAKAO BLIND RECRUITMENT[1차] 비밀지도  (0) 2022.08.02
[프로그래머스] 코딩테스트 연습월간 코드 챌린지 시즌2 약수의 개수와 덧셈  (0) 2022.07.30
[프로그래머스] 코딩테스트 연습 - 나머지가 1이 되는 수 찾기  (0) 2022.07.29
[프로그래머스] 코딩테스트 연습 연습문제 문자열 다루기 기본  (0) 2022.07.28
    'Algorithm' 카테고리의 다른 글
    • [프로그래머스] 코딩테스트 연습정렬 K번째수
    • [프로그래머스] 코딩테스트 연습2018 KAKAO BLIND RECRUITMENT[1차] 비밀지도
    • [프로그래머스] 코딩테스트 연습월간 코드 챌린지 시즌2 약수의 개수와 덧셈
    • [프로그래머스] 코딩테스트 연습 - 나머지가 1이 되는 수 찾기
    새벽_나그네
    새벽_나그네
    IT, 프로그래밍, 정보, 스마트스토어

    티스토리툴바

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.