[문제 링크] 👇
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
💡 sorted() 와 lambda 사용
- sorted와 lambda 를 조합해서 사용한다.
- strings 리스트의 요소들을 다음 기준에 따라 정렬
- 기본 정렬 기준 : 각 문자열의 n번째 글자를 기준으로 오름차순 정렬
- 보조 정렬 기준 : 만약 n번째 글자가 같은 문자열이 있다면, 전체 문자열을 기준으로 사전순 정렬
lambda
- n 번째 인덱스 기준으로 정렬하고, 동일한 글자인 경우 문자열 기준으로 추가 정렬
key=lambda x: (x[n], x)
sorted()
- strings 오름차순 정렬
sorted(strings)
Solution
sol.1
def solution(strings, n):
# 첫 번째로 n번째 문자 기준으로 정렬하고, 두 번째로 전체 문자열 기준으로 정렬
answer = sorted(strings, key=lambda x: (x[n], x))
return answer
1️⃣ key=lambda x: (x[n], x)
- 각 문자열에 대해 (x[n], x) 형태의 튜플을 생성한다.
- 예를 들어, n = 1이고 strings = ["sun", "bed", "car"] 라면,
- "sun"의 key는 ("u", "sun"), "bed"의 key는 ("e", "bed"), "car"의 key는 ("a", "car")
2️⃣ sorted는 리스트를 key 값을 기준으로 정렬한다.
- 먼저 n번째 문자인 첫 번째 요소 (x[n], x)의 첫 번째 항목을 기준으로 비교하여 오름차순으로 정렬한다.
- 예시에서 ("u", "sun"), ("e", "bed"), ("a", "car")를 n=1 기준으로 정렬하면 "car", "bed", "sun" 순서로 나열된다.
3️⃣ 보조 정렬
- 만약 첫 번째 요소가 동일하면, x 전체 문자열(두 번째 요소)을 기준으로 사전순 정렬된다.
- 예를 들어 strings = ["ace", "acd", "acf"]에서 n=1이면,
- ("c", "ace"), ("c", "acd"), ("c", "acf")가 되어 사전순 정렬로 "ace", "acd", "acf"가 된다.
sol.2
def solution(strings, n):
answer = []
answer = sorted(sorted(strings), key=lambda x:x[n])
return answer
위 방식은 리스트 strings를 두 단계에 걸쳐 정렬한다. 여기서는 문자열의 n번째 글자 기준으로 오름차순 정렬하되, 동일한 n번째 글자가 있는 경우, 사전순으로 정렬하는 방식이다. 이 과정에서 내부 sorted() 함수가 먼저 실행되고, 그 결과를 외부 sorted() 함수가 다시 정렬한다.
1️⃣ 첫 번째 sorted(strings) 실행
- 이 단계에서는 strings 리스트의 원소들을 전체 문자열 기준으로 사전순 정렬
- 예를 들어, strings = ["sun", "bed", "car"]이면 첫 번째 sorted(strings)는 ["bed", "car", "sun"]로 정렬
2️⃣ 두 번째 sorted(..., key=lambda x: x[n]) 실행
- 여기서 첫 번째 sorted(strings) 결과인 ["bed", "car", "sun"]이 입력된다.
- 이제 key=lambda x: x[n]에 의해 각 문자열의 n번째 글자를 기준으로 정렬
- 예를 들어, n=1이면
- "bed"의 n번째 글자는 "e",
- "car"의 n번째 글자는 "a",
- "sun"의 n번째 글자는 "u"
3️⃣ ("e", "a", "u") 순서대로 "car", "bed", "sun"으로 정렬
'프로그래머스 코딩테스트 > Level 1' 카테고리의 다른 글
[Programmers] L1. 콜라 문제 (Python) (0) | 2024.11.07 |
---|---|
[Programmers] L1. 모의고사 (완전탐색/Python) (0) | 2024.11.06 |
[Programmers] L1. 가장 가까운 같은 글자 (Python) (0) | 2024.11.06 |
[Programmers] L1. 삼총사 (Python) (0) | 2024.11.06 |
[Programmers] L1. 예산 (Python) (0) | 2024.10.30 |