본문 바로가기

코딩테스트/Python

[프로그래머스] K번째수

내가푼것

def solution(array, commands):
    answer = []
    
    for i in range(len(commands)):
        array_i = array[commands[i][0]-1:commands[i][1]]
        array_i.sort()
        answer.append(array_i[commands[i][2]-1])
        
    return answer

먼저 array를 잘라서 array_i에 넣어준다. array_i를 정렬한뒤 K번째 수를 answer에 넣는다.

 

 

다른사람이 푼것

역시.. 코드들이 짧다..

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

map의 함수 칸에 lambda를 사용하였다. commands의 x가 들어올때 x[0]과 x[1]을 사용하여 array를 자르고 정렬시킨다.

정렬시킨 list의 K번째의 수를 구한다.

 

 

map()


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

tuple(map(함수,튜플))

리스트의 요소를 지정된 함수로 처리해 주는 함수이다. 원본 리스트를 변경하지 않고 새 리스트를 생성한다.

# map 사용 X
a = [1.2, 2.5, 3.7, 4.6]
for i in range(len(a)):
	a[i] = int(a[i])

[1, 2, 3, 4]


# map 사용 O
a = [1.2, 2.5, 3.7, 4.6]
a = list(map(int,a))

[1, 2, 3, 4]

 

 

람다(lambda)


lambda 인자 : 표현식

함수를 다른 형태로 표현한 것이다.

def a(x,y):
	return x + y

print(a(10,20))

# lambda 함수 사용 후
(lambda x,y : x + y)(10,20)
# map의 함수 칸에 lambda를 사용함

list(map(lambda x:x**2,range(5)))

[0,1,4,9,16]