내 Style은 다 맞아. 그게 나라서 더 좋아

김키핑·6일 전
post-thumbnail

문제

ㄴ 링크

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 하여라.

예시)

  • 예시 1: 1번째 인덱스 기준 → u, e, a → ["car", "bed", "sun"]
  • 예시 2: 2번째 인덱스 기준 → c, c, x → cdx가 마지막. c가 같은 abce, abcd는 사전순으로 정렬 → ["abcd", "abce", "cdx"]

풀이

파이썬 내장함수와 기본 기능에 충실할 것

sorted 함수는 문자열 리스트를 정렬할 수 있고, key로 함수를 받아 정렬 기준을 바꿀 수 있다.
이 두 가지를 떠올리며 풀어 보자.

1. strings의 각 문자열을 [n번째 글자, 원본 문자열] 쌍으로 묶는다.

2. 쌍들을 정렬한다. n번째 글자로 먼저 비교하고, 같으면 원본 문자열의 사전순으로 비교한다.

3. 정렬된 쌍에서 원본 문자열만 꺼내 반환한다.

# n번째 글자와 원본 문자열을 쌍으로 묶어 정렬하는 함수
def make_sorted_pairs(strings, n):
    pairs = []
    for s in strings:
        pairs.append([s[n], s])
    pairs.sort()
    return pairs


# 실행
def solution(strings, n):
    pairs = make_sorted_pairs(strings, n)

    answer = []
    for pair in pairs:
        answer.append(pair[1]) # 정렬된 문자열에서 원본 문자열만 남겨두기

    return answer

다른 사람 풀이

람다 함수를 이용한 풀이

def strange_sort(strings, n):
    return sorted(strings, key=lambda x: x[n])
strings = ["sun", "bed", "car"] 
print(strange_sort(strings, 1))

생각한 점

람다 함수를 쓸 수 있는 상황에서 람다 함수를 잘 떠올리지 못하는 경우가 많다.
코드가 길어질 듯한 상황에서는 람다함수로 보기 좋은 코드를 작성해보는 것도 좋을 듯 하다.

profile
양치기소녀

0개의 댓글