[문제]
https://programmers.co.kr/learn/courses/30/lessons/12915
코딩테스트 연습 - 문자열 내 마음대로 정렬하기
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱
programmers.co.kr
[풀이]
이 문제의 정렬 조건
- 각 문자열의 인덱스 n번째 글자 기준 오름차순으로 정렬
- 인덱스 n의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치
일단 문제가 정렬문제이고 다중 조건인 경우, 람다식을 사용한 정렬을 이용해 문제를 해결한다.
a = [(1, 2), (0, 1), (5, 1), (5, 2), (3, 0)]
# 인자없이 그냥 sorted()만 쓰면, 리스트 아이템의 각 요소 순서대로 정렬을 한다.
b = sorted(a)
# b = [(0, 1), (1, 2), (3, 0), (5, 1), (5, 2)]
# key 인자에 함수를 넘겨주면 해당 함수의 반환값을 비교하여 순서대로 정렬한다.
c = sorted(a, key = lambda x : x[0])
# c = [(0, 1), (1, 2), (3, 0), (5, 1), (5, 2)]
d = sorted(a, key = lambda x : x[1])
# d = [(3, 0), (0, 1), (5, 1), (1, 2), (5, 2)]
# 아이템 첫 번째 인자를 기준으로 오름차순으로 먼저 정렬하고,
# 그리고 그 안에서 다음 두 번째 인자를 기준으로 내림차순으로 정렬하게 하려면, 다음과 같이 할 수 있다.
e = [(1, 3), (0, 3), (1, 4), (1, 5), (0, 1), (2, 4)]
f = sorted(e, key = lambda x : (x[0], -x[1]))
# f = [(0, 3), (0, 1), (1, 5), (1, 4), (1, 3), (2, 4)]
기본적으로 검색하면 나오는 설명이 위의 코드이다.
문제에 맞는 람다식은
strings.sort(key = lambda x :(x[n], x))
인데 이는 람다식 튜플의 첫 번째 요소는 첫 번째 조건, 두 번째 요소에는 첫 번째 조건으로 정렬한 후의 두 번째 조건을 의미한다.
[코드]
def solution(strings, n):
strings.sort(key = lambda x :(x[n], x))
return strings
'문제풀이 > Programmers' 카테고리의 다른 글
[프로그래머스][Lv1][Python] 소수 만들기 (0) | 2022.02.18 |
---|---|
[프로그래머스][Lv1][Python] 이상한 문자 만들기 (0) | 2022.02.17 |
[프로그래머스][Lv1][Python] 하샤드 수 (0) | 2022.02.17 |
[프로그래머스][Lv1][Python] 모의고사 (0) | 2022.02.11 |
[프로그래머스][Lv1][Python] 최소직사각형 (0) | 2022.02.11 |