본문 바로가기
코딩 문제/프로그래머스 [ Python ]

[ 프로그래머스 / Python ] 문자열 내림차순으로 배치하기

by CODESIGN 2022. 11. 9.

https://school.programmers.co.kr/learn/courses/30/lessons/12917?language=python3 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제 설명

 


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

 

 

제한 사항


  • str은 길이 1 이상인 문자열입니다.

 

 

입출력 예


s return
"Zbcdefg" "gfedcbZ"

 

 

나의 풀이


자바스크립트에서는 문자열을 split으로 해서 list를 만들어 주는데... 시작부터 난관에 부딪쳤다. 

찾아보니 list()를 사용해서 쉽게 list형으로 변환이 가능했다.

sort(), reverse() 같은 경우는 자바스크립트랑 비슷해서 괜찮았는데 다시 문자열로 변환하는 방법이 달라 조금 헤맨 것 같다. 

 

def solution(s):
    s = list(s)
    s.sort()
    s.reverse()
    return "".join(s)

 

 

 

다른 풀이


간결하다...! 덕분에 새로운 문법을 익혔다.

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

 

 

파이썬 문법


sort()와 sorted의 차이점


sort() 함는 리스트만을 위한 메서드이다. 반면 sorted() 함수는 어떤 이터러블(ex. 딕셔너리) 객체도 받을 수 있다.

 

a = [(3,2), (3,0), (2,1), (1,0)]

# 인자 없이 sorted()를 사용하면 리스트 아이템의 각 요소 순서대로 정렬
# 첫 번째 요소가 같으면 두 번째 요소로 비교
b = sorted(a)
print(b)    # [(1, 0), (2, 1), (3, 2), (3, 0)]

# key인자에 lambda 함수를 넘겨주면 반환값을 가지고 비교해 정렬
# 이 때, key로 전달되지 않은 요소에 대해선 정렬하지 않음
c = sorted(a, key=lambda x : x[0])
print(c)    # [(1, 0), (2, 1), (3, 2), (3, 0)]
d = sorted(a, key=lambda x : x[1])
print(d)    # [(1, 0), (2, 1), (3, 2), (3, 0)]


# 다중 조건을 넘겨줄 수도 있다
# 첫 번째 인자를 기준으로 오름차순 정렬을 먼저 한다.
# 그 결과를 가지고 두 번째 인자를 기준으로 내림차순 정렬(-를 붙이면 내림차순 정렬)
e = sorted(a, key = lambda x : (x[0], -x[1]))
print(e)    # [(1, 0), (2, 1), (3, 2), (3, 0)]

 

 

댓글