[프로그래머스][LV.1] 문자열 내 마음대로 정렬하기 | python3

2025. 1. 22. 20:28프로그래머스/LV.1

 

문제 링크: 문자열 내 마음대로 정렬하기

 

문제 설명

문제 설명

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

.

제한사항
- strings는 길이 1 이상, 50이하인 배열입니다.
- strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
- strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
- 모든 strings의 원소의 길이는 n보다 큽니다.
- 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

 


문제 풀이

왠지 sort에 그런 기능이 있을 것 같아서 피티씨한테 물어봤다...


♣ sort()함수의 key 매개변수

sort() 함수에는 기본적으로 리스트의 원소를 정렬할 때 기준을 설정할 수 있는 key 매개변수가 있습니다. 이 key 매개변수를 사용하면 특정 기준에 따라 정렬할 수 있습니다. 리스트의 각 원소가 리스트나 튜플처럼 인덱스 접근이 가능한 경우, 특정 인덱스를 기준으로 정렬할 수 있습니다.


data.sort(key=lambda x: x[i])

이런식으로 i 인덱스를 기준으로 정렬가능.

key 매개변수에 사용할 수 있는 것

  1. 람다 함수
    # 길이를 기준으로 문자열 정렬
    words = ["apple", "banana", "pear", "kiwi"]
    words.sort(key=lambda x: len(x))
    print(words) # ['kiwi', 'pear', 'apple', 'banana']
  2. 일반 함수
    # 정수의 절댓값을 기준으로 정렬
    def abs_key(x):
        return abs(x)
    nums = [-10, 5, -2, 8]
    nums.sort(key=abs_key)
    print(nums) # [-2, 5, 8, -10]
  3. 모듈에서 제공되는 함수 (e.g., str.lower, abs)
    # 대소문자를 무시하고 문자열 정렬
    words = ["Banana", "apple", "cherry", "Kiwi"]
    words.sort(key=str.lower)
    print(words) # ['apple', 'Banana', 'cherry', 'Kiwi']
  4. 사용자 정의 함수
    class Person:
        def __init__(self, name, age):
            self.name = name
            self.age = age

        def __repr__(self):
            return f"{self.name} ({self.age})"

    # 나이를 기준으로 정렬
    people = [Person("Alice", 30), Person("Bob", 25), Person("Charlie", 35)]
    people.sort(key=lambda p: p.age)
    print(people) # [Bob (25), Alice (30), Charlie (35)]

 

 

내코드

def solution(strings, n):
    strings.sort()
    strings.sort(key=lambda x : x[n])

    return strings

 

 


더보기

다른사람풀이

def solution(strings, n):
    answer = []
    temp = []
    for i , s in enumerate(strings):
        temp.append( (s[n], s))
    temp.sort()

    for a, b in temp:
        answer.append(b)
    return answer

리스트와 튜플을 활용하여 푼 풀이. 간결하고 좋은 풀이 같다.

튜플로 s의 n번째 글자와 s를 같이 저장한 튜플로 리스트를 만든 다음 정렬하고 s값만 빼온다.

이렇게 다시 풀어봐야갰다.