문제 설명
문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.
s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

제한 사항
str은 길이 1 이상인 문자열입니다.


입출력 예

s return
Zbcdefg gfedcbZ

 

다른 사람의 풀이를 보니 내가 작성한 코드는 정말 복잡하고 길다는 생각이 들었다.
짧게 풀 수 있도록 고쳐보기! 

 

def solution(s):

    # 문자열 안에 있는 문자들 정렬하기 위해 문자 하나씩 리스트에 넣어줌
    alist = list()

    for i in s:
        alist.append(i)

    # 문자들 정렬( 대문자가 들어있다면 대문자는 현재 앞쪽에 있는 상태)
    alist = sorted(alist)

    # 대문자 찾은 후 새로운 리스트에 삽입
    Alist = list() # 대문자 담을 리스트
    aalist = list() # 소문자들 새로 담을 리스트
    for i in alist:
        # 대문자 발견하면 대문자리스트에 삽입
        if(i in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
            Alist.append(i)
        # 대문자가 아닐 경우 새로운 소문자 리스트에 삽입
        else:
            aalist.append(i)

    # 대,소문자 리스트 내림차순 정렬
    Alist.sort(reverse=True)
    aalist.sort(reverse=True)

    # 소문자만 들어있게 된 리스트에 대문자리스트를 뒤에 더해줌
    for i in Alist:
        aalist.append(i)

    # 리스트를 문자열로 출력
    answer = ''
    for i in range((len(aalist))):
        answer += aalist[i]

    return answer

 

+ Recent posts