ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로그래머스 문제풀이 : 문자열 내림차순으로 배치하기
    코딩 2025. 3. 26. 01:26

    문제 개요

    주어진 문자열 s에서 문자들을 큰 것부터 작은 순으로 정렬한 후 새로운 문자열을 반환하는 함수를 작성해야 합니다.

    제한사항

    • s영문 대소문자로만 구성됩니다.
    • 대문자는 소문자보다 작은 것으로 간주합니다. (즉, 소문자가 대문자보다 더 크다고 판단해야 함)
    • s의 길이는 1 이상입니다.

    문제 해결 방법

    1. 내림차순 정렬 수행
      • sorted(s, reverse=True)를 사용하면 기본적으로 내림차순 정렬이 되지만, 대문자가 소문자보다 먼저 오게 됩니다.
      • 이를 해결하기 위해 정렬 기준을 key=str.lower로 설정하여 소문자와 동일한 기준으로 정렬한 후, 같은 경우 원래의 우선순위를 유지해야 합니다.
    2. 정렬된 문자들을 문자열로 변환
      • join()을 사용하여 리스트를 문자열로 변환합니다.
    3.  


    코드 구현

    def solution(s):
        return ''.join(sorted(s, reverse=True))

    코드 설명

    1. sorted(s, reverse=True)
      • 기본적으로 문자를 내림차순 정렬합니다.
      • 이때, ASCII 값이 높은 순서대로 정렬되므로 소문자가 대문자보다 우선하게 됩니다.
    2. ''.join(sorted(s, reverse=True))
      • 정렬된 리스트를 다시 문자열로 변환합니다.

    대체 방법 (정렬 기준 직접 설정하기)

    만약 대소문자의 정렬 기준을 명확히 지정하고 싶다면 key 매개변수를 활용할 수도 있습니다.

    # 정렬 기준을 직접 지정한 버전
    def solution(s):
        return ''.join(sorted(s, key=lambda x: (-ord(x), x)))

    왜 이렇게 정렬할까?

    • ord(x)는 문자의 ASCII 값을 반환합니다.
    • -ord(x)를 사용하면 큰 값부터 작은 값 순으로 정렬됩니다.
    • x를 함께 정렬 기준으로 추가하면, 같은 ASCII 값일 때 원래 순서를 유지할 수 있습니다.

    시간 복잡도 분석

    • sorted() 함수의 시간 복잡도는 **O(N log N)**입니다.
    • 문자열 길이가 최대 1000이라도, O(1000 log 1000)은 충분히 빠르게 실행됩니다.

    결론

    이 문제는 문자열 정렬 방법을 이해하고, 적절한 기준을 적용하는 것이 핵심이었습니다.

    핵심 포인트 정리


    ✅ ASCII 값을 기준으로 정렬되는 점을 고려하여 대소문자 순서를 맞추기
    ''.join()을 사용하여 리스트를 문자열로 변환하기

Designed by Tistory.