[프로그래머스(LV1)] K번째수
문제 설명
배열 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 함수를 작성해라.
- 입출력 예 설명
[1, 5, 2, 6, 3, 7, 4]를 2번째부터 5번째까지 자른 후 정렬합니다. [2, 3, 5, 6]의 세 번째 숫자는 5입니다.
[1, 5, 2, 6, 3, 7, 4]를 4번째부터 4번째까지 자른 후 정렬합니다. [6]의 첫 번째 숫자는 6입니다.
[1, 5, 2, 6, 3, 7, 4]를 1번째부터 7번째까지 자릅니다. [1, 2, 3, 4, 5, 6, 7]의 세 번째 숫자는 3입니다.
내가 작성한 코드
import Foundation
func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] {
var numArray = [Int](repeating: 0, count: commands.count)
var newArray: [Int] = []
for i in 0..<commands.count {
var a = commands[i][0] - 1
newArray = []
while a <= commands[i][1] - 1 {
newArray.append(array[a])
a += 1
}
newArray = newArray.sorted{$0 < $1}
numArray[i] = newArray[commands[i][2] - 1]
}
return numArray
}
commands의 count만큼 결과가 도출되므로 결과를 담을 numArray를 commands.count만큼 0으로 초기화해주었다.
나는 i값을 가지는 변수를 두고 그 값이 j가 될때까지 새로운 배열에 값을 추가하도록 하였다.
배열의 인덱스는 0부터 시작하므로 변수 a를 commands[i][0] - 1로 설정해주었고 while문이 시작되기 전에 newArray를 비워주어 이전 값에 영향을 받지 않도록 해주었다.
while문을 이용해 a의 값이 j - 1과 같아질 때까지 newArray라는 배열에 array[a]값을 추가하고 a에 1을 더해주어 다음 인덱스로 진행될 수 있게 하였다.
다음으로 sorted로 작은 수부터 정렬하도록 하고 k번째 수를 구해 numArray에 값을 넣어 리턴하였다.
쉽게 풀 수 있는 문제였지만, 다른 분의 풀이를 보니 map을 이용하면 더욱 짧고 간단한 코드로 작성이 가능했다. map에 대해 더욱 자세히 공부해봐야겠다.
Author And Source
이 문제에 관하여([프로그래머스(LV1)] K번째수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kkll135/프로그래머스LV1-K번째수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)