문제풀이/일일연습문제

[sort]99클럽 코테 스터디 11일차 TIL + 프로그래머스/1/12933. 정수 내림차순으로 배치하기

Mo_bi!e 2024. 8. 1. 17:10

문제 설명

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

제한 조건
  • n은 1이상 8000000000 이하인 자연수입니다.
입출력 예
n return
118372 873211

 

 

<내코드>

def solution(n):
    list_n = list(map(int, str(n)))
    sorted_n = sorted(list_n, reverse=True)
    str_n = list(map(str,sorted_n))
    result = ''.join(str_n)
    return int(result)

1. 헤맨부분

- list(map()) 으로 풀었는데 이 방법을 짧은 기간 내 또 잊어버림

 

- 자료형에 대한 변환을 잊어버림

=> 문자열 다루는 방법에 대해서 잊어버림

예) join() / split()

 

- join, split 에 대한 용도를 잊어버림

=> join()은 리스트를 문자열로 해줌

=> split()는 문자열을 리스트로 해줌

 

 

<모범사례>

def solution(n):
    # n을 문자열로 변환하여 각 자릿수를 리스트로 만듦
    digits = list(str(n))
    
    # 각 자릿수를 내림차순으로 정렬
    digits.sort(reverse=True)
    
    # 정렬된 자릿수를 다시 하나의 문자열로 합침
    sorted_number_str = ''.join(digits)
    
    # 문자열을 정수로 변환하여 반환
    return int(sorted_number_str)

# 예시 실행
print(solution(118372))  # 출력: 873211

 

 

<보충학습>

1. sort 와 sorted 에 대한 차이 명확히 이해

sort() 는 리스트에 대한 메소드이다. 결과에 대해서 따로 리턴하지않고, 리스트 자체에대해서 바로 정렬을 함

sorted는 이터러블한(반복가능한)객체들에 대한 정렬이다. 이 경우 결과에 대해서 따로 리턴을 함

 

2. list(정수) VS list(문자열)

전자의 경우 정수 자체는 이터러블 하지않으므로 불가능하지만, 문자열을 이터러블하기 때문에 가능함

 

3. join VS split

join은 리스트를 문자열로 (리스트로 각각 흩어진 것들을 join(뭉쳐서) 문자열이 돼자!)

split는 문자열을 리스트로 쪼개자!!!