갱스터하우스

[Python] Lv1. 문자열 내 마음대로 정렬하기 본문

코테 문제/프로그래머스

[Python] Lv1. 문자열 내 마음대로 정렬하기

승갱 2022. 4. 12. 23:50

https://programmers.co.kr/learn/courses/30/lessons/12915

 

코딩테스트 연습 - 문자열 내 마음대로 정렬하기

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱

programmers.co.kr

 

 

 

 

 

문제 설명

문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.

 

제한 조건

  • strings는 길이 1 이상, 50이하인 배열입니다.
  • strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
  • strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
  • 모든 strings의 원소의 길이는 n보다 큽니다.
  • 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.

 

나의 접근방법 및 풀이

"n번째 문자" : "전체 단어" 의 딕셔너리를 이용해서 풀려고 했지만, 딕셔너리에서 key값이 중복이 되는 경우를 생각하지 않아서 실패했다.

def solution(strings, n):
    answer = []
    tmp = {}
    
    for i in range(len(strings)):
        tmp[strings[i][n]] = strings[i]
    
    stmp = sorted(tmp.items())
    for i in stmp:
        answer.append(i[1])
        
    return answer

solution(["sun", "bed", "car"], 1)
solution(["abce", "abcd", "cdx"], 2)

다른 풀이들을 참고해, 각각의 단어 앞에 정렬하는 인덱스의 문자를 붙여 새로운 리스트에 추가하여 정렬한 뒤, 슬라이싱을 이용해 return 하였다.

def solution(strings, n):
    tmp = []
    answer = []
    
    for s in strings:
        tmp.append(s[n]+s)
    tmp = sorted(tmp)
    
    for s in tmp:
        answer.append(s[1:])
    return answer

 

 

다른 풀이

lambda를 이용해서 x[n]+x[:](=n에 해당하는 문자+각 문자)를 key로 하여 strings를 정렬한다.

def solution(strings, n):
    '''strings의 문자열들을 n번째 글자를 기준으로 정렬해서 return하세요'''
    return sorted(strings, key = lambda x : x[n]+x[:])

solution(["sun", "bed", "car"], 1)
solution(["abce", "abcd", "cdx"], 2)