정수 내림차순으로 배치하기

sky·2022년 3월 9일
0

Programmers Lv.1(Python)

목록 보기
5/28
post-thumbnail

📕프로그래머스 코딩테스트 Level 1 (Python3)


문제 설명

함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다.

My algorithm

  • 버블 정렬 이용하기
  1. 정수 n을 1자리씩 구분한다.
  2. 앞에서부터 접해있는 숫자부터 대소를 비교한다.
  3. 전자보다 후자가 더 크면 자리를 교체한다.
  4. 후자보다 전자가 더 크거나 같다면 그대로 두다.
  5. 그 다음 접해있는 숫자를 반복 비교해서 자리를 바꾼다.
  6. 정렬이 됐으면 리턴하고 그렇지 않으면 앞의 알고리즘을 반복한다.
버블 정렬은 구현이 간단하고 단순하다. 하지만 최상, 평균, 최악 시간복잡도가 모두 일정하고 다른 정렬에 비해 오래 걸리기 때문에 비효율적이다.
  • 병합 정렬 이용하기
  1. 정수 n을 숫자 1개씩 쪼개 배열로 만든다.
  2. 하나의 배열을 2개로 쪼갠다.
  3. 쪼개진 배열을 다시 4개로 쪼갠다.
  4. 숫자 한 개의 배열이 남을 때 까지 쪼갠다.
  5. 더 이상 쪼갤 수 없을 때 배열 두 개를 병합하는데 이때 정렬을 한다.
  6. 5번을 반복해서 최종적으로 처음 배열의 크기만큼 병합한다.
병합 정렬은 버블 정렬에 비해 복잡하지만 효율적이다.

Bubble Sort solution

def solution(n):
    a = list(map(int, str(n))) #리스트 만들기
    for i in range(len(a)-1) :
        for j in range(0, len(a)-1-i) :
            if a[j+1] > a[j]:
                temp = a[j+1]
                a[j+1] = a[j]
                a[j] = temp
    b = "".join(map(str,a))
    return int(b)

런타임 에러가 났다... 그래서 다른 풀이를 봤는데 똑같이 에러가 난다.

자꾸 에러가 나서 다른 방법으로도 시도해봤는데 에러가 나는 사람들이 많았다.ㅜ
다른 풀이를 봤는데 역시 파이썬... 이래서 파이썬 하나보다. 단 몇 줄로 정렬이 가능하다.

another solution

def solution(n):
ls = list(str(n))
    ls.sort(reverse = True)
    return int("".join(ls))

📜코드 해석

⏱total time

  • 2022-03-07 / 16:10 - 17:10 : 버블 정렬 하다가 도저히 답이 안 나옴
  • 2022-03-07 / 22:30 - 23:30

⚙ 리뷰

이 문제를 보자마자 알고리즘 강의에서 배웠던 정렬 알고리즘들이 떠올랐다. 그때는 이론만 배웠지만 실전에 써먹으니 열심히 들었던 보람이 생겼다.
그러나 그것은 곧 재앙이었으니... 오히려 독이 된 듯 하다. 짧게 풀 수 있는 문제를 장황하게 풀어 써서 오히려 더 복잡해진 것 같다. 덕분에 런타임 에러도 났고ㅜ 역시 파이썬 공부를 먼저 해야하나 고민이 된다.

새로 알게 된 코드

  • reverse() : 어떤 값도 반환하지 않고 리스트의 값을 거꾸로 뒤집는 메소드
  • reversed() : 순서가 거꾸로 뒤집힌 리스트를 반환하는 메소드
  • 리스트 vs 배열 :
profile
개발자가 되고 싶은 1人

0개의 댓글