가장 큰 수

2021. 4. 26. 18:56·코딩/프로그래머스 lv2

문제 설명

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

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

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

제한 사항

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

입출력 예

 

 

import itertools
def solution(numbers):
    a= []

    num=list(map(str,numbers))
    p = list(itertools.permutations(num, len(num)))

    for i in range(len(p)):
        c=''
        for j in range(len(p[i])):
            c += p[i][j]
        a.append(c)
    answer=str(max(list(map(int,a))))

    return answer

이렇게 했는데 답은 맞지만 시간 초과....

 

여기서 알게 된덤 max, sort 둘 다 문자열에서 사용 가능하다...!

 

못풀것 같아서 다른 사람들의 코드를 보았다...

import itertools
def solution(numbers):


    num=list(map(str,numbers))
    num.sort(key=lambda x: x * 3, reverse=True)
    print(num)

    return str(int(''.join(num)))

wooaoe.tistory.com/82

 

[Python] 프로그래머스 가장 큰수 파이썬 코드

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

wooaoe.tistory.com

이분이 설명을 아주 잘 해주셨다

 

 

  • int형의 list를 map을 사용하여 string으로 치환한 뒤, list로 변환한다. 
  • 변환된 num을 sort()를 사용하여 key 조건에 맞게 정렬한다. 
  • lambda x : x*3은 num 인자 각각의 문자열을 3번 반복한다는 뜻이다. 
    x*3을 하는 이유? -> num의 인수값이 1000 이하이므로 3자리수로 맞춘 뒤, 비교하겠다는 뜻.
    이 문제의 핵심이라고 할 수 있다. 
  • 문자열 비교는 ASCII 값으로 치환되어 정렬된다. 따라서 666, 101010, 222의 첫번째 인덱스 값으로 비교한다. 
    6 = 86, 1 = 81, 2 = 82 이므로 6 > 2 > 1순으로 크다. 
  • sort()의 기본 정렬 기준은 오름차순이다. reverse = True 전의 sort된 결과값은 10, 2, 6이다. 
  • 이를 reverse = True를 통해 내림차순 해주면 6,2,10이 된다. 이것을 ''.join(num)을 통해 문자열을 합쳐주면 된다. 
  • int로 변환한 뒤, 또 str로 변환해주는 이유?
    모든 값이 0일 때(즉, '000'을 처리하기 위해) int로 변환한 뒤, 다시 str로 변환한다. 

melonicedlatte.com/2020/08/16/231900.html

 

 

[프로그래머스] 가장 큰 수 풀이 - Easy is Perfect

1. 문제 https://programmers.co.kr/learn/courses/30/lessons/42746 2. 풀이 방법 저는 문제 해결 방법을 잘 못 잡아서 문제를 해결하지 못하여 해설을 보았습니다. 풀이는 크게 2가지로 보여지고, 하기 소스코드

melonicedlatte.com

 

여기서 알게 된점!

'12' 와 '1'을 어케 비교 했을 까?

우선 3번을 곱한다. 그럼

'121212' '111' 이 된다. 문자열은 사전식 배열의 비교를 한다.

처음 '1'은 같고 2번째 '2' '1'이 다르다. 여기서는 reverse를 해주었으니

'2' 가 앞으로 온다!

'3' '31'의 비교는 '333' '313131' 앞에 3은 같고 다음 3과 1이 다르다!

여기서는 reverse니 '333' 이 앞에 온다!

배운게 많다

 

반응형

'코딩 > 프로그래머스 lv2' 카테고리의 다른 글

H-Index  (0) 2021.04.27
[프로그래머스] 타겟 넘버 - 파이썬  (0) 2021.04.27
[프로그래머스] 큰 수 만들기 - 파이썬  (0) 2021.04.24
주식가격  (0) 2021.04.24
[프로그래머스] 행렬의 곱셈 - 파이썬  (0) 2021.04.13
'코딩/프로그래머스 lv2' 카테고리의 다른 글
  • H-Index
  • [프로그래머스] 타겟 넘버 - 파이썬
  • [프로그래머스] 큰 수 만들기 - 파이썬
  • 주식가격
코딩 코딩 코오딩
코딩 코딩 코오딩
  • 코딩 코딩 코오딩
    코딩하는 누누
    코딩 코딩 코오딩
  • 전체
    오늘
    어제
    • 분류 전체보기 (491)
      • 생산성 (2)
        • 인텔리제이 (2)
      • 프로젝트 기록 (14)
        • git (2)
        • spring (3)
        • TestCode (2)
        • spring security (3)
        • 기타 (2)
        • MySQL (0)
        • Cloud (2)
      • 회고 (4)
      • Spring (6)
      • JPA (0)
      • DB (4)
        • MySql (2)
        • Redis (1)
      • Java (7)
        • JSP (1)
      • 잡담 (1)
      • CS (30)
        • 컴퓨팅 사고 (0)
        • 배열 (4)
        • 알고리즘 (8)
        • 메모리 (7)
        • 자료구조 (9)
        • 암호학 (2)
      • opencv (14)
      • AI (56)
        • 머신러닝 (2)
        • 딥러닝 (7)
        • tensorflow (3)
        • 머신러닝(딥러닝) 정리 (21)
        • 강화학습 (7)
        • 논문 읽기 (1)
        • 잡동사니 (1)
        • python AI (13)
        • 선형대수 (1)
        • 확률론 (0)
      • 알고리즘 공부 (177)
        • 그래프 이론 (0)
        • 다익스트라 (4)
        • 위상정렬 (3)
        • 신장트리-크루스칼 알고리즘 (4)
        • 플로이드 워셜 (3)
        • 이진탐색 (9)
        • 백트래킹 (11)
        • 부르드포스 (9)
        • 다이나믹 프로그래밍 (20)
        • BFS & DFS (24)
        • 그리디 (6)
        • 구현 (15)
        • 정렬 (3)
        • 기타 (62)
        • 수학? (1)
      • 코딩 (173)
        • 파이썬(python) (15)
        • c언어 (13)
        • 프로그래머스 lv1 (46)
        • 프로그래머스 lv2 (41)
        • 백준 - c++ (49)
        • Softeer (9)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    그리디
    인접리스트
    삽입 정렬
    소수찾기
    BFS
    스택
    알고리즘
    백준
    인접행렬
    n진법 변환
    c언어
    왜곡보정
    이미지처리
    DFS
    if문
    캘리브레이션
    코딩
    에라토슽네스의 체
    자료구조
    코딩기초
    C언어 기초
    프로그래머스
    큐
    다이나믹 프로그래밍
    코딩기초스킬
    선택정렬
    코딩문제
    순차 탐색
    정렬
    코딩테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코딩 코딩 코오딩
가장 큰 수
상단으로

티스토리툴바