-
프로그래머스 문제풀이 : 문자열 내림차순으로 배치하기코딩 2025. 3. 26. 01:26
문제 개요
주어진 문자열 s에서 문자들을 큰 것부터 작은 순으로 정렬한 후 새로운 문자열을 반환하는 함수를 작성해야 합니다.
제한사항
- s는 영문 대소문자로만 구성됩니다.
- 대문자는 소문자보다 작은 것으로 간주합니다. (즉, 소문자가 대문자보다 더 크다고 판단해야 함)
- s의 길이는 1 이상입니다.
문제 해결 방법
- 내림차순 정렬 수행
- sorted(s, reverse=True)를 사용하면 기본적으로 내림차순 정렬이 되지만, 대문자가 소문자보다 먼저 오게 됩니다.
- 이를 해결하기 위해 정렬 기준을 key=str.lower로 설정하여 소문자와 동일한 기준으로 정렬한 후, 같은 경우 원래의 우선순위를 유지해야 합니다.
- 정렬된 문자들을 문자열로 변환
- join()을 사용하여 리스트를 문자열로 변환합니다.
코드 구현
def solution(s): return ''.join(sorted(s, reverse=True))
코드 설명
- sorted(s, reverse=True)
- 기본적으로 문자를 내림차순 정렬합니다.
- 이때, ASCII 값이 높은 순서대로 정렬되므로 소문자가 대문자보다 우선하게 됩니다.
- ''.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()을 사용하여 리스트를 문자열로 변환하기'코딩' 카테고리의 다른 글
프로그래머스 문제 풀이 : 최솟값 만들기 (0) 2025.03.28 프로그래머스 문제 풀이 : 올바른 괄호 판단하기 (0) 2025.03.27 프로그래머스 문제 풀이: 약수의 개수와 덧셈 (0) 2025.03.25 프로그래머스 문제 풀이: 콜라츠 추측 (Level 1) (0) 2025.03.22 node 2023_04_07_TIL.js ...is not defined (2) 2023.04.08