[프로그래머스][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 매개변수에 사용할 수 있는 것
- 람다 함수
# 길이를 기준으로 문자열 정렬
words = ["apple", "banana", "pear", "kiwi"]
words.sort(key=lambda x: len(x))
print(words) # ['kiwi', 'pear', 'apple', 'banana']- 일반 함수
# 정수의 절댓값을 기준으로 정렬
def abs_key(x):
return abs(x)
nums = [-10, 5, -2, 8]
nums.sort(key=abs_key)
print(nums) # [-2, 5, 8, -10]- 모듈에서 제공되는 함수 (e.g., str.lower, abs)
# 대소문자를 무시하고 문자열 정렬
words = ["Banana", "apple", "cherry", "Kiwi"]
words.sort(key=str.lower)
print(words) # ['apple', 'Banana', 'cherry', 'Kiwi']- 사용자 정의 함수
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값만 빼온다.
이렇게 다시 풀어봐야갰다.
'프로그래머스 > LV.1' 카테고리의 다른 글
[프로그래머스][LV.1] 추억 점수 | python3 (1) | 2025.01.23 |
---|---|
[프로그래머스][LV.1] 카드 뭉치 | python (0) | 2025.01.23 |
[프로그래머스][LV.1] 숫자 문자열과 영단어 | python3 (0) | 2025.01.22 |
[프로그래머스][LV.1] K번째수 | python3 (0) | 2025.01.22 |
[프로그래머스][LV.1] 시저 암호 | python3 (0) | 2025.01.22 |