티스토리 뷰
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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 가 출력되진 않는다. 셔플의 경우에는 직접 인덱스를 뽑아 만드는 수 밖에 없다.