[프로그래머스] k번째 수 python

lemonlily·2024년 1월 2일

1. 문제

문제 설명

배열 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입니다.

입출력 예

array [1, 5, 2, 6, 3, 7, 4]	
commands [[2, 5, 3], [4, 4, 1], [1, 7, 3]]	
return [5, 6, 3]



2. 작성한 코드

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

  return answer



3. 더 좋은 풀이법 발견

def solution(array, commands):
    return list(map(lambda x:sorted(array[x[0]-1:x[1]])[x[2]-1], commands))
  • 한 줄로 풀이하는 게 정말 고수라고 생각했다!
  • 눈으로 보기에 훨씬 깔끔하기 때문에 이렇게 작성할 수 있으면 좋다고 생각했다.
  • 속도와 메모리 측면에서도 약간의 이득을 얻을 수 있었다.



4. lambda를 복습하자!

  • 한번 정리하고 가면 좋을 거 같아서 서치하다가 좋은 블로그글 발견! 내가 한 번 더 정리하면 기억에 남을 거 같아서 정리해본다. (나중에는 문제보고 바로 좋은 풀이법을 생각할 수 있으려나,,,!!)
  • lambda는 lambda 인자 : 표현식 으로 나타낸다.

1) map() 함수와 함께 사용하기

  • map() 함수는 시퀀스(리스트, 튜플 등)의 모든 요소에 함수를 적용한 결과를 반환합니다.
mylist = [1, 2, 3, 4, 5]
mylist2 = list(map(lambda x: x * 2, mylist))
print(mylist2)
[2, 4, 6, 8, 10]

2) filter() 함수와 함께 사용하기

  • filter() 함수는 시퀀스(리스트, 튜플 등)의 모든 요소 중에서 조건에 맞는 요소만을 반환합니다.
mylist = [1, 2, 3, 4, 5]
mylist2 = list(filter(lambda x: x % 2 == 1, mylist))
print(mylist2)
[1, 3, 5]

3) sorted() 함수와 함께 사용하기

  • 개인적으로 가장 많이 쓰던 방식!
  • sorted() 함수는 시퀀스(리스트, 튜플 등)의 요소를 정렬한 결과를 반환합니다.
  • lambda 함수로 다양한 정렬 규칙 사용 가능
mylist = ['apple', 'banana', 'cherry']
mylist2 = sorted(mylist, key=lambda x: len(x))
print(mylist2)
['apple', 'cherry', 'banana']

4) reduce() 함수와 함께 사용하기

  • reduce() 함수는 시퀀스(리스트, 튜플 등)의 모든 요소를 누적적으로 계산한 결과를 반환합니다.
  • 아래 코드는 모든 리스트의 요소들을 곱한 결과를 반환
from functools import reduce

mylist = [1, 2, 3, 4, 5]
result = reduce(lambda x, y: x * y, mylist)
print(result)
>>> 120
profile
NLP 엔지니어,,,,? 가 될 수,,,? 나도,,,,?

0개의 댓글