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

minj-j·2022년 6월 28일
0

CodingTest

목록 보기
2/14

이건 어떤 풀이도 참고하지 않고 내가 풀이해봤다.
그래서 비효율적일 수도 있다.
그냥 이렇게 이렇게 하면 돌아가겠지 하는 생각으로 짠 것이기 때문에

def solution(array, commands):
    cutArray = []
    result = []
    for part2 in commands:
        i = part2[0]
        j = part2[1]
        k = part2[2]
        
        for part in range(i-1, j):
            cutArray.append(array[part])
            cutArray.sort()
        result.append(cutArray[k-1])
        cutArray.clear()
    return result
    
print(solution([1, 5, 2, 6, 3, 7, 4], [[2, 5, 3], [4, 4, 1], [1, 7, 3]]))

읽을 사람만 읽어 볼 설명 🐿️

우선 풀이하는 데에 급급하여 변수명을 제대로 설정하지 않아 뒤죽박죽이다.

문제를 살펴보도록 하자

배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어진다고 하였다.
그러면 commands 내의 값에 따라 i, j, k가 변하므로
여기에 for 문을 걸어줘야겠다고 생각했다.

for part2 in commands:
        i = part2[0]
        j = part2[1]
        k = part2[2]

그게 이 부분이다.
commands 배열에 있는 값들을 part2에 담고
commands는 2차원 배열 이니까 part2에는 1차원 배열이 담겨 있다.
그 1차원 배열들의 index 값 위치에 있는 수들을 각각 i, j, k에 담아주었다.

for part2 in commands:
        i = part2[0]
        j = part2[1]
        k = part2[2]
        
        for part in range(i-1, j):
            cutArray.append(array[part])
            cutArray.sort()
        result.append(cutArray[k-1])
        cutArray.clear()

그 다음 for 문이다. 나는 이중 for문으로 해당 문제를 풀이하였다.
문제에서 array의 i번째부터 j번째까지 자른다고 하였으니,
for문이 출력 할 range를 i-1에서 j까지로 설정해 주었다.

미리 비워놓은 cutArray에 array의 [part] 인덱스 위치에 있는 값들을
append 즉, 삽입해 주었다. 그리고 sort모듈로 정렬을 하고,
최종적인 결과 값을 저장할 result 배열에
cutArray에 있는 k-1 인덱스 위치에 있는 값을 삽입해 주었다.
(문제에서 일반적인 인덱스 시작 위치인 0,1,2..가 아닌 1부터 시작해서
다 1씩 빼준 값으로 코드를 짰다.)

새로운 commads 배열 값이 돌 때마다 cutArray는 비워져 있어야 함으로
나는 이것도 clear모듈 사용해서 비워주었다.

그리고 result배열 내에 있는 값들 출력해주고 마무리 했다.

여기까지 입니다. 감사합니다.🐇

profile
minj-j`s Development diary!

0개의 댓글