https://school.programmers.co.kr/learn/courses/30/lessons/12917?language=python3
문제 설명
문자열 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)]
'코딩 문제 > 프로그래머스 [ Python ]' 카테고리의 다른 글
[ 프로그래머스 / Python ] 최소직사각형 (0) | 2022.11.09 |
---|---|
[ 프로그래머스 / Python ] 내적 (0) | 2022.11.09 |
[ 프로그래머스 / Python ] 음양 더하기 (0) | 2022.11.08 |
[ 프로그래머스 / Python ] 기초 문제 모음 (0) | 2022.11.07 |
댓글