티스토리 뷰

반응형
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(strings, n):
    strings.sort()
    answer =sorted(strings,key=lambda x:x[n])       
    return answer
    
["car", "bed", "sun"]

문제에서 요구하는 것은 정렬이다.

python의 경우, 정렬을 위한 함수로 간편하게 sorted가 있다.

 

sorted(정렬하고자 하는 리스트)라고 하면 자동으로 오름차순으로 정렬한다.

sorted(정렬하고자 하는 리스트, reverse=True) 라고 하면 자동으로 내림차순으로 정렬한다.

 

만약 리스트 안에 있는 요소가 이 문제처럼 각각 나뉘어져 있다면, key와 lambda 함수를 이용해 각 요소마다 정렬시킬 수도 있다.

lambda 함수는 lambda (매개변수):(표현식)으로 쓰는것이 일반적인데, 예를 들자면

lambda x,y: x+y를 하면 x와 y를 넣었을 때 x+y를 리턴해준다.

(lambda x,y: x + y)(10, 20)
>30

 

아무튼 sorted와 lambda 함수를 쓰면, 각 리스트에 있는 단어마다 인덱스를 기준으로 정렬해줄 수 있다.

예를 들어, 위의 sorted(strings,key=lambda x:x[1]) 이라고 하면, sun 이라고 하는 문자열의 u 만 뽑아지고,

bed 라고 하는 문자열의 e만 뽑아지고, car이라고 하는 문자열의 a만 뽑아져서 이를 기준으로 오름차순으로 정렬된다.

또한 숫자의 경우 -만 앞에 붙이면(ex => -x[1] ) 하면 내림차순으로 쓸 수 있다. str의 경우에는 되지 않아 reverse 함수를 따로 써야한다.

 

def solution(strings):
    strings.sort()
    answer =sorted(strings,key=lambda x:(x[1],x[0],x[2]))       
    return answer

만약 이렇게 쓴다면, 1번 인덱스(2번쨰 문자)를 기준으로 먼저 오름차순으로 정렬된다. 그 뒤에 0번 인덱스(1번째 문자)를 기준으로 오름차순으로 정렬되고, 2번 인덱스(3번쨰 문자)를 기준으로 오름차순으로 정렬된다.

 

이때 출력은 인덱스의 번호는 바뀌지 않는다. 즉, 단어가 bed라면 bed 전체가 특정 위치로 정렬되는 것이지 다른 문자와 섞여서 bad 가 출력되진 않는다. 셔플의 경우에는 직접 인덱스를 뽑아 만드는 수 밖에 없다.

반응형