Algorithm/프로그래머스

세무민의 알고가자 : 프로그래머스 문자열 내 마음대로 정렬하기 문제 풀이

세기루민 2021. 2. 28. 15:07
728x90

오늘 풀어 볼 문제는 문자열 내 마음대로 정렬하기!


문제 설명 및 제한 조건


입출력


풀이 

사실 이번 문제는 10분?정도 걸렸던거 같네요 ㅎㅎ 

사실 너무 쉬운 문제라서 포스팅하는게 맞는지 의문이 들었지만 해봅니다.

이번 문제에서는 n번째 값을 기준으로 정렬을 해주면 됩니다.

또한 같은 값이 존재한다면 사전순으로 나열하면 된다고 하네요! 

여기서 초점을 둬야하는 부분은?!

1. 정렬을 2번 해주기!

정렬을 2번하는 건 사전순으로 한번 정렬해준 뒤 n을 기준으로 정렬해주기 위해서!

이렇게 문제를 접근하면 끝입니다.

코드는 2가지 방법으로 풀어봤어요! 


코드

def solution(strings, n):
    # 방식 1
    strings.sort()
    strings.sort(key=lambda x : (x[n]))
    return strings
    
def solution2(s, n):
    # 방식 2
    result = []
    s.sort()

    for i in range(len(s)):
        result.append([s[i], s[i][n]])

    result.sort(key=lambda x : (x[1]))

    answer = []
    for i in range(len(result)):
        answer.append(result[i][0])

    return answer

두개의 방식의 차이를 아시겠나요?

첫번째는 정렬에서 내장함수를 이용해서 해당 인덱스를 기준으로 정렬해줬습니다.

두번째는 2차원 배열로 만들어준 뒤 해당 2차원 배열에서 인덱스가 n인 값을 기준으로 정렬해주고 

해당 정렬된 값만 리스트로 추출해주면 되는 방식입니다.

사실 2개중에 첫번째가 가장 간편하고 쉬운 방법입니다.

그렇지만 때로는 lambda 사용법이 해깔리는 경우가 존재하는데 그럴땐 두번째 방식으로 접근하는게 그나마 쉽겠죠?

사실 sort나 sorted를 사용하지 않고 직접 선택정렬과 같은 정렬을 구현해도 괜찮습니다.

그렇지만 알고리즘 테스트는 생각보다 적은 시간을 주기 때문에 메소드나 함수들을 아는 것이 중요합니다! 

끝!


다음에도 알고리즘 포스팅으로 찾아오겠습니다! 

포스팅이 도움되셨다면 좋아요 & 구독 한번 눌러주시면 감사하겠습니다!

 

728x90