오늘의 문제 - 문자열
문제 설명
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
제한 조건
- strings는 길이 1 이상, 50이하인 배열입니다.
- strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
- strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
- 모든 strings의 원소의 길이는 n보다 큽니다.
- 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
내 풀이 및 접근 방식
def solution(strings, n):
strings.sort(key=lambda x : (x[n], x))
return strings
- x[n]: 원소의 n 번째 문자를 기준으로 정렬시킨 후, x: 원소 전체를 기준으로 정렬한다.
처음 시도로 아래와 같이 코드를 작성하고 실패했다. sort 메소드는 원본을 수정하고 정렬된 리스트 값을 반환하지 않기 때문에 결과값은 None이 출력됐다.
def solution(strings, n):
answer = []
answer = strings.sort(key=lambda x : (x[n], x))
return answer # 결과값 None
위 코드를 알맞게 수정하려면 sorted를 사용하는 방식이 있다. sorted는 원본은 그대로 두고, 새로 정렬한 리스트를 반환한다.
def solution(strings, n):
answer = []
answer = sorted(strings, key=lambda x : (x[n], x))
return answer # 결과값 None
회고
sort와 sorted 차이 다시 확인하고, 매개변수 공부하자.
sort
- 원본 정렬
- 리스트 내의 메소드로 리스트에만 사용 가능하다. ex) set 안됨
-
<list>.sort(key = <function>, reverse = <bool>)
sorted
- 새로 정렬된 리스트를 반환한다.
- 반복 가능한 객체들에 사용 가능하다.
-
sorted( <iterable> , key = <function> , reverse = <bool>)
lamda
일회성으로 사용되는 익명 함수를 만들기 위해 사용한다. 일반 함수를 작성하는 것보다 메모리를 절약할 수 있다. 아래 코드는 일반 함수를 작성하고 key 값으로 넣어준 코드이다.
def temp(x):
return (x[n], x)
strings.sort(key=temp)
reverse
True인 경우 내림차순 정렬, False인 경우 오름차순 정렬한다.디폴트는 False이다.
reverse를 안 쓰는 방법으로, key = lambda x : -x[n] 과 같이 앞에 -를 붙여주는 방식이 있다. 그러나 이는 숫자에서만 가능하고, 문자열에서는 reverse를 써야한다.
잘못된 정보 수정 요청이나 추가 정보 환영
'코테 스터디 99클럽' 카테고리의 다른 글
99클럽 코테 스터디 6일차 TIL + 해시 (0) | 2024.07.28 |
---|---|
99클럽 코테 스터디 5일차 TIL + 해시 (0) | 2024.07.27 |
99클럽 코테 스터디 4일차 TIL + 문자열 (0) | 2024.07.26 |
99클럽 코테 스터디 2일차 TIL + 배열 (1) | 2024.07.23 |
99클럽 코테 스터디 1일차 TIL + 배열 (3) | 2024.07.23 |