안녕하세요.

 

 

최근에 코딩테스트 준비를 조금씩 해보고 있는데요.

 

 

하다 보니 제가 모르는 파이썬의 기능들도 많이 있고, 또 나름대로 생각하고 구현하는 시간을 가질 수 있다는 점에서 좋은 것 같습니다.

 

 

또 얼마나 시간을 투자할 수 있을지 모르겠지만, 앞으로 제가 문제 풀면서 알게 된 점이랑 공유할 점들을 한번 정리해서 올려볼까 합니다.

 

 

첫 번째로 다뤄볼 문제는 '문자열 내 마음대로 정렬하기'라는 문제입니다.

 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

문제를 한번 보시고, 어떻게 풀면 좋을지 고민해보신 후 봐주시면 좋을 것 같습니다.

 

 

스포 방지를 위해 풀이는 접은글로 처리하고 있으니, 눌러서 확인해보시면 됩니다.

 

 

제가 푼 풀이:

더보기
def solution(strings, n):
    answer = []

    # 1. n번째 요소를 먼저 모은다.
    element = []
    for s in strings:
        element.append(s[n])
    
    # 2. 요소들을 set으로 묶은 다음에 sort한다.
    ele_lst = sorted(list(set(element)))
    
    # 3. 정렬된 요소 list에서 하나씩 빼면서, strings을 돌며 해당하는 요소랑 같은 애들을 빼고
    # 뺀 애들을 오름차순으로 정렬한 다음 answer에 다시 insert한다.
    for ele_l in ele_lst:
        sample_part = []
        for s in strings:
            if s[n] == ele_l:
                sample_part.append(s)
        answer.extend(sorted(sample_part))
    
    return answer

 

처음에는 단순히 n번째 요소만 가지고 sort하는 방식을 생각했는데, 문제에서 '인덱스 n의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.'라는 조건이 있었습니다.

 

그래서 단순히 n번째 요소만 가지고 sort를 하게 되면 문제가 발생합니다.

 

 이를 해결하기 위해서 단계적으로 접근하는 방법을 생각해 보았는데요.

 

먼저 n번째 요소를 list에 담고, 이를 set으로 묶은 다음 list로 만들고 오름차순으로 만들어줍니다.

 

그런 다음, 이 정렬된 요소 list에서 하나씩 빼면서, strings에 대해 for문을 돌면서 n번째 요소가 정렬된 요소 list에서 나온 요소와 같은 경우만 append 한 다음, 이를 sort 해서 answer에 extend해주는 방식을 생각했습니다.

 

list에서 extend를 하는 경우는 list 안에 있는 element들을 그대로 list 안에 넣어줄 때 사용합니다. (많이 사용하는 append와의 차이점)

 

순차적으로 봤을 땐 나쁘지 않은 풀이인 것 같으나, 아무래도 조금 더 간단한 풀이가 있으니 간단하게 풀 수 있는 방법도 괜찮을 것 같습니다.

 

 

참고한 답안:

더보기
def solution(strings, n):
    answer = sorted(strings, key = lambda x: (x[n], x))
    
    return answer

이 문제를 그냥 한 줄로 풀 수 있는 코드인데요.

 

저도 처음에 sorted에서 lambda를 사용하는 방법은 생각을 했으나, 단순히 n번째 요소만 가지고 정렬을 해보았더니 안되어서 이 방법 말고 위에서 언급한 방법으로 갔었습니다.

 

sorted에서 key로 정렬해 줄 때, 조건을 여러 개 걸 수 있다는 점을 알고 가면 좋은 답안이라고 생각합니다.

 

lambda x: (x[n], x) 이런 형식으로 괄호로 묶어주면, 다중 조건 정렬이 가능합니다.

 

 

 

이번 글은 여기서 마무리하도록 하겠습니다.

 

 

감사합니다.

+ Recent posts