본문 바로가기
코테 스터디 99클럽

99클럽 코테 스터디 3일차 TIL + 문자열

by leelisa 2024. 7. 24.

오늘의 문제 - 문자열

문제 설명

문자열로 구성된 리스트 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
  1. 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를 써야한다.

 

 

잘못된 정보 수정 요청이나 추가 정보 환영