[파이썬] 프로그래머스LV1 문자열 내 마음대로 정렬하기

청수동햄주먹·2023년 2월 4일
0

파이썬코딩테스트

목록 보기
4/35

소팅할 때 key를 설정하는 방법을 안다면 수월하게 풀 수 있는 문제같다.
나는 잘 몰라서 구글하긴 했지만..
sorted(key=)로 설정해 주면 된다.
구글하다가 나온 두가지 방법을 사용해 보았다

1. from operator import itemgetter

from operator import itemgetter
def solution(strings, n):
    strings.sort()
    return sorted(strings, key=itemgetter(n))

operator 공식문서
<itemgetter 사용법>

  • 한개 또는 여러개를 지정해서 리턴할 수 있다.

    from operator import itemgetter
    
    print( itemgetter(1)('python') ) #y
    print( itemgetter(1, 3, 5)('python') ) # ('y', 'h', 'n')
  • 한 청크를 지정해서 리턴할 수 있다

    from operator import itemgetter
    arr = ['a','b','c','d']
    print( itemgetter(slice(3, None))(arr) ) #['d']
  • dict()를 쓸 때 .get('key')대신 itemgetter로 밸류를 리턴받을 수 있다

    from operator import itemgetter
    
    thisdict = {
        'fruit': 'dragonfruit',
        'color' : 'pink'
    }
    thisdict['price'] = 3000
    print( itemgetter('price')(thisdict) )

2. lambda

def solution(strings, n):
    strings.sort()
    return sorted(strings,key=lambda x:x[n])
  • lambda 로 strings에 있는 단어 각각으로부터 n번째 문자를 추출해서 배열한다

두 방법 모두 오름차순으로 정열하고 다시 n번째 문자를 기준으로 해주었는데 n번째에 같은 값이 있을 경우 그 다음 문자로 정열이 되어 있어야 하기 때문이다.

성능 비교

            itemgetter              lambda
테스트 1 〉	통과 (0.01ms, 10.1MB)	통과 (0.00ms, 10.2MB)
테스트 2 〉	통과 (0.00ms, 10.1MB)	통과 (0.00ms, 10.1MB)
테스트 3 〉	통과 (0.01ms, 10.3MB)	통과 (0.01ms, 10.1MB)
테스트 4 〉	통과 (0.01ms, 10MB)  	통과 (0.01ms, 10.1MB)
테스트 5 〉	통과 (0.01ms, 10.1MB)	통과 (0.00ms, 10.1MB)
테스트 6 〉	통과 (0.01ms, 9.99MB)	통과 (0.01ms, 10.1MB)
테스트 7 〉	통과 (0.01ms, 10.1MB)	통과 (0.01ms, 10.1MB)
테스트 8 〉	통과 (0.01ms, 10.3MB)	통과 (0.01ms, 10.1MB)
테스트 9 〉	통과 (0.00ms, 10.1MB)	통과 (0.01ms, 10.1MB)
테스트 10 〉	통과 (0.01ms, 10.2MB)	통과 (0.01ms, 10.1MB)
테스트 11 〉	통과 (0.01ms, 10.1MB)	통과 (0.01ms, 10.1MB)
테스트 12 〉	통과 (0.01ms, 10.2MB)	통과 (0.02ms, 10.2MB)
profile
코딩과 사별까지

0개의 댓글