[python_파이썬_pass]프로그래머스_LV1_문자열 내 마음대로 정렬하기_풀이

2024. 5. 10. 11:59코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/kdCOczz1e9c?feature=shared

sort만 잘 알면 해결하기 어렵지 않다.

 

<첫번째 시도 : 통과>

lambda는 처음 사용해봤다. 단순히 lambda 인자 : 표현식으로 표현

sort()의 괄호 안헤 key = 함수 ==> 여기에 함수가 나와야 함 그래서 lambda가 유용함

ex> def sum(x, y):

            return x + y

       lambda x, y : x + y 

def solution(strings, n):
    strings.sort()
    strings.sort(key=lambda x:x[n])
   
    return strings

 

<두번째 시도 : 통과>

함수를 만들어서 key=에 넣는게 조금 헷갈린다. 계속 풀다보니 key이걸 알면 오름차순, 내림차순할때 유용하다.

def solution(strings, n):
    def temp(s):
        return s[n]
   
    strings.sort()
    strings.sort(key=temp) #key=함수
   
    return strings

 

<다른사람 풀이를 참고해서 key를 모를 경우>

문제를 직관적으로 본다. => 최근에 느끼는 거지만 직관적으로 보면 안된다. 숲을 봐야 문제가 쉽게 풀린다.

문제의 조건대로 n번째 인덱스를 찾아서 오름차순으로 정렬 후 조건을 가지고 있는다.

 

그 다음 while문과 이중for문으로 조건을 하나씩 만족하는걸 찾는데

중요한건 만약 같은 문자가 나올 경우 애매한 상황이다. 

두번째 예시에서  c가 두번 나오면

sorted_strings[j][n] not in answer조건이 빠지면 무한루프에 빠지게 된다.

# strings = ["abce", "abcd", "cdx"]
# n = 2
def solution(strings, n):
    temp = []
    for i in strings:
        temp.append(i[n])
    sorted_temp = sorted(temp)
    print(sorted_temp)
   
    answer = []
    sorted_strings = sorted(strings)
    while len(answer) != len(strings):
        for i in range(len(strings)):
            for j in range(len(strings)):
                if sorted_temp[i] == sorted_strings[j][n] and sorted_strings[j] not in answer:
                    answer.append(sorted_strings[j])
                    continue
    return answer
728x90
반응형