포시코딩

[프로그래머스][Lv.1][정렬] K번째수 본문

자료구조알고리즘/문제풀이

[프로그래머스][Lv.1][정렬] K번째수

포시 2022. 12. 25. 04:09
728x90

문제

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

 

프로그래머스

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

programmers.co.kr

 

내 풀이

def solution(array, commands):
    return [ getNumber(array, i, j, k) for [i, j, k] in commands ]

def getNumber(array, i, j, k):
    return sorted(array[i-1:j])[k-1]

객체 구조 분해 할당을 배운 뒤부터 파이썬에서도 사용 가능한 점을 통해 

매우 쉽게 변수 할당을 하고 있다.

 

리스트 컴프리헨션도 점점 익숙해진다.

풀 때는 result = ~ 를 쓰고 return result 이런식으로 하고선

그 뒤에 다시 저런식으로 깔끔하게 정리하고 있긴한데 

처음부터 큰 그림을 그려 쓸데없는 코드가 발생하지 않게 해야겠다.

 

다만, 걸리는 점은 문제가 '정렬' 카테고리로 분류되있는데 정작 sorted()로 살짝 정렬해주는 부분 밖에 없어

내가 문제 출처의 의도를 잘못 파악했나 고민이 됐다. 

다른 풀이를 보면 답이 나오지 않을까.

 

다른 풀이

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

언젠가부터 다른 풀이에 많이 보이는데

list(map(  )).. 

한 번 짚고 넘어가야겠다.

lambda도 마찬가지다. 솔직히 위의 저 코드가 어떻게 작동하는지 감이 안오는데

list(map())과 lambda에 대해 공부한 다음 보면 나도 활용할 수 있지 않을까 싶다.

 

내 풀이+

def solution(array, commands):
    return [ sorted(array[i-1:j])[k-1] for [i, j, k] in commands ]

따로 뺐던 함수가 간단하여 아예 한줄로도 나타낼 수 있었다.

풀 때는 왜 이게 보이지 않았던걸까..

아마 중간에 헷갈려서 getNumber 함수 안에 if문이 나왔던 것 때문에 생각하지 못했던게 아닐까 싶다.

728x90