안녕하세요.

 

 

이번에 다뤄볼 문제는 K번째수 라는 문제입니다.

 

 

사실 문제 자체가 어렵지는 않아서, 풀이가 어렵지는 않은데요.

 

 

참고한 답안이 워낙 깔끔해서, 이를 한번 짚고 넘어가 보기 위해 글로 정리하게 되었습니다.

 

 

문제는 다음과 같습니다.

 

 

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

 

프로그래머스

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

programmers.co.kr

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

제가 푼 풀이:

 

def solution(array, commands):
    answer = []
    
    for c in commands:
        answer.append(sorted(array[c[0]-1:c[1]])[c[2]-1])
    
    return answer

 

 

문제에서 commands가 주어졌을 때, commands의 모든 원소에 대해서 연산을 적용해야 한다고 했으므로 여기에 대해서 for문을 돌린다고 생각했습니다. 각 요소를 c로 정의했고요.

 

array에서 c[0]번째 숫자부터 c[1]번째 숫자까지 잘라야 하므로, 이를 array[c[0]-1:c[1]]로 구현했습니다.

 

우리가 n번째라고 말하지만, python에서는 index가 0부터 시작이므로 -1을 해주어야 합니다.

 

그리고 이를 정렬한 후, c[2]번째 있는 수를 빼내야 하므로 sorted(array[c[0]-1:c[1]])[c[2]-1]로 구현하였고, answer에 append해서 답을 냈습니다.

 

 

 

 

 

참고한 답안:

def solution(array, commands):
    return list(map(lambda x:sorted(array[x[0]-1:x[1]])[x[2]-1], commands))

 

한 줄의 코드로 표현한 답안입니다.

 

사실 제가 푼 것과 동일하지만, 이를 map과 lambda를 통해서 구현한 코드라고 보시면 될 것 같습니다.

 

일단 lambda 함수에 대해서 설명해 보자면, def를 활용해서 어떤 이름을 주고 함수를 만들 필요가 없는 경우 사용을 하게 됩니다. 즉, 결국 함수에 해당한다는 것이죠.

 

이 코드에서 lambda x:sorted(array[x[0]-1:x[1]])[x[2]-1]에 해당하는 것은 x라는 입력이 들어왔을 때, 출력을 sorted(array[x[0]-1:x[1]])[x[2]-1]로 내겠다는 의미입니다.

 

그리고 map의 경우는, map(함수, list) 형식으로 사용하게 되는데 list에 있는 각 요소들에 대해서 함수를 일괄 적용하겠다는 의미입니다.

 

즉, 위 코드는 lambda라는 함수를 commands라는 list 안에 있는 요소들에게 모두 적용하겠다. 그리고 이것을 list로 만들어서 return 하겠다는 코드로 보시면 될 것 같습니다.

 

 

 

이번 문제는 여기서 마무리하도록 하겠습니다.

 

 

감사합니다.

 

 

 

 

 

+ Recent posts