본문 바로가기

알고리즘 공부

k번째로 작은 수

728x90

https://programmers.co.kr/learn/courses/33/lessons/1864?language=python3 

 

COS Pro 2급 Python 모의고사 - k번째로 작은 수

[[5,12,4,31],[24,13,11,2],[43,44,19,26],[33,65,20,21]] 4 11

programmers.co.kr

 

문제

자연수가 담겨있는 n x 4 크기의 2차원 배열에서 k번째로 작은 수를 찾으려 합니다. 이때, n은 배열의 세로길이, 4는 배열의 가로길이입니다. 예를 들어 다음은 자연수가 담겨있는 4 x 4 크기의 2차원 배열입니다.

위 2차원 배열에서 가장 작은 수는 2입니다. 두 번째로 작은 수는 4, 세 번째로 작은 수는 5이며, 네 번째로 작은 수는 11입니다.

2차원 배열 arr와 k가 매개변수로 주어질 때, arr에서 k번째로 작은 수를 찾아 return 하도록 solution 함수를 완성해주세요.

 

 

과정

n번째로 작은 수를 찾아라. 에서 받아온 배열속 요소들을 전부 뒤져봐야 되겠다는 생각이 들었다. 

arr로 받는 배열들은 하나로 합치고 그 안에 오름차순으로 작은 수부터 k번째까지 탐색해야겠다~ 생각하고 시작!

하나로 합친 allNumbers를 k번 만큼 퀵정렬로 빼려 했으나 sorted라는 편한 함수가 있어서 더욱 쉽게 풀 수 있었다.

 

 

풀이

 

def solution(arr, k):
    answer = 0
    allNumbers = []
    for a in arr:
        allNumbers += a
    numbers = sorted(allNumbers)
    for i in range(k):
        answer = numbers[i]
    return answer

 

괜히 어렵게 코드를 쓰면서 낭비할 필요가 없다. 물론 길어도 상관은 없지만 이미 제공되는 함수들을 적극 활용하여 문제를 풀도록 하자.

대신 사용하는 함수들의 시간복잡도나 원리에 대해서는 꼭 이해를 하자.

 

728x90