핀아의 저장소 ( •̀ ω •́ )✧

21일차(2020-12-04) 본문

Computer Science/코딩테스트_Python

21일차(2020-12-04)

_핀아_ 2020. 12. 4. 22:01

programmers.co.kr/learn/challenges

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

<문제 1> 프로그래머스) k번째 수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.
 
예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면
 
array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
2에서 나온 배열의 3번째 숫자는 5입니다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, 
commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 
나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.
 
<제한사항>
array의 길이는 1 이상 100 이하입니다.
array의 각 원소는 1 이상 100 이하입니다.
commands의 길이는 1 이상 50 이하입니다.
commands의 각 원소는 길이가 3입니다.
cs

 

<답안 1>

1
2
3
4
5
6
7
8
9
10
11
12
13
array = [1526374]
commands = [[253], [441], [173]]
 
def solution(array, commands):
    answer = []
 
    for i in commands:
        arr = array[i[0]-1:i[1]]
        arr.sort()
        answer.append(arr[i[2]-1])
    return answer
 
print(solution(array, commands))
cs

 

<lamda로 풀이>

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

 

문제를 풀다보면 Lamda 함수를 사용한 풀이가 종종 나오는데 간단한건 알아보지만 위의 식처럼 조금만 길어지거나 map이 들어가면 정신이 혼미해진다. (...)

따라서 오늘은 문제를 하나만 풀고 람다 함수를 사용한 풀이법을 이해하고자 한다.

 

먼저 람다 함수의 기본 개념을 잡기 위해 코딩 도장에서 개념을 다시 익혔다.

dojang.io/mod/page/view.php?id=2359

 

파이썬 코딩 도장: 32.1 람다 표현식으로 함수 만들기

Unit 32. 람다 표현식 사용하기 지금까지 def로 함수를 정의해서 사용했습니다. 이번에는 람다 표현식으로 익명 함수를 만드는 방법을 알아보겠습니다. 람다 표현식은 식 형태로 되어 있다고 해서

dojang.io

여기서 기억해야 할 것은 람다 표현식 안에서는 변수를 새로 추가 할 수 없다는 것이다. (단, 바깥에 있는 변수를 활용하는 것은 가능)

 

★map함수: 리스트의 요소를 지정된 함수로 처리해주는 함수로 보통 list와 함께 사용한다.

-> list(map(함수, 리스트))

 

이제 list(map(lambda x:sorted(array[x[0]-1:x[1]])[x[2]-1], commands)) 이 코드를 분석해보자!

  1. commands 안에 요소들이 하나씩 array로 넘어오기 때문에 for문을 따로 작성해 줄 필요가 없다.
  2. 예를 들어 commands에서 첫번째 요소인 [253]가 넘어왔다 치면 이는 x = [253]로 할당되어 slicing이 진행된다.
  3. 그 후 sort함수로 정렬한 후 [x[2]-1]가 실행된다. (앞서 slicing한 후 sort한 array[x[2]-1]이 실행된 것이라 보면 된다.)
  4. 이를 행하는게 map이고 map으로 나온 값을 list로 형변환 해서 저장한다.

 

 

 

'Computer Science > 코딩테스트_Python' 카테고리의 다른 글

23일차(2020-12-08)  (0) 2020.12.08
22일차(2020-12-07)  (0) 2020.12.07
20일차(2020-12-03)  (0) 2020.12.03
19일차(2020-12-02)  (0) 2020.12.02
18일차(2020-12-01)  (0) 2020.12.01
Comments