728x90
https://programmers.co.kr/learn/courses/30/lessons/42748?language=swift
정렬
자연수 (1~100) 배열이 주어지고 command : [시작점, 끝점, K]가 배열로 주어진다.
자연수 배열을 시작점과 끝점 범위에 맞게 자른뒤 정렬하고, 그 중 K번째수를 구한다
각 command의 K번째수를 담은 배열을 반환하는 문제
접근방법(접근방법1)
command를 for문으로 순회하며 subArray를 구하고, 정렬한 뒤, K번째 인덱스를
result 배열에 append함 -> 최종적으로 result배열을 반환
개선된 접근방법(접근방법2)
command 하나에 K번째수 하나가 대응되므로 commands(이차원배열)을 map을 이용하여 처리
map 함수 내에서 command하나를 -> K번째 수로 대응 (위의 접근방법과 동일한 처리)
클린코드 책을 보고있어서 변수 선언을 되도록 해주려고 하는데 실행시간이 효율적이지 못할거라고 생각했지만
접근방법1의 코드를 별도의 변수선언없이 배열의 서브스크립트만을 사용했을때가 시간이 미세하게 오래걸렸음(프로그래머스 실행결과 상)
확실히 접근방법2가(변수를 따로 선언하지 않음) 실행시간이 미세하게(0.01ms) 적게 나오긴 함.
9줄이 1줄로 줄여질때의 쾌감..
소스코드
import Foundation
// 접근방법1
func solution(_ array:[Int], _ commands:[[Int]]) -> [Int] {
var ks: [Int] = []
for command in commands {
let start = command[0]-1
let end = command[1]-1
let k = command[2]-1
let subArray = array[start...end].sorted()
ks.append(subArray[k])
}
// 같은 for 문 동작
for command in commands {
ks.append(array[command[0]-1...command[1]-1].sorted()[command[2]-1])
}
return ks
}
// 접근방법2
func solution2(_ array:[Int], _ commands:[[Int]]) -> [Int] {
return commands.map { array[$0[0]-1...$0[1]-1].sorted()[$0[2]-1] }
}
728x90
'알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스] #135 예산 (Swift) (0) | 2022.02.11 |
---|---|
[프로그래머스] #134 최소직사각형 (Swift) (0) | 2022.02.11 |
[프로그래머스] #132 체육복 (Swift) (0) | 2022.02.10 |
[프로그래머스] #131 모의고사 (Swift) (0) | 2022.02.08 |
[프로그래머스] #130 메뉴 리뉴얼 (0) | 2021.12.08 |