TIL/알고리즘 공부
프로그래머스 Lv. 1 Swift 알고리즘 - 명예의 전당(1)
여의도사노비
2022. 12. 27. 16:45
728x90
이번 문제는 간단했다.
글이 너무 어렵게 쓰여있어 솔직히 몇번 더 읽고 문제를 풀었는데, 역시 테스트 케이스를 보면 이해가 금방 간다.
결국 k번째까지 나오는 값들은 전부 배열에 저장해두고 k+1번째 나오는 값들을 k번까지 나왔던 값들과 비교하여 최소값은 날리고 새로운 값을 추가하면 되는 문제였다. 그리고 추가가 끝난 뒤 새롭게 최솟값을 찾아 배열에 저장하면 답을 구할 수 있었다.
이 문제를 풀면서 생각한 논리적 흐름
- k번째 값까지는 전부 Array에 쌓는다.
- k+1번째 값부터 누적된 Array 내에 있는 원소들과 값을 비교한다.
- k+1번째 값이 Array를 sort해서 나온 가장 작은 숫자보다 크다면,
- sorteaArray 내부의 원소중 가장 작은 값을 지워준다.(sortedArray.removeLast)
- 그리고 k+1번째 값을 넣어준다.
- 이렇게 k개 만큼의 원소값을 유지해주면서 각 과정이 끝날때마다 제일 작은 값을 ansArray에 넣어준다.
* 코드
import Foundation
func solution(_ k:Int, _ score:[Int]) -> [Int] {
var array: [Int] = []
var ansArray: [Int] = []
for i in 0...score.count-1 {
if i < k {
array.append(score[i])
ansArray.append(array.min()!)
} else {
var sortedArray = array.sorted(by: >)
if score[i] > sortedArray[k-1] {
sortedArray.removeLast()
sortedArray.append(score[i])
array = sortedArray
}
ansArray.append(array.min()!)
}
}
return ansArray
}
정리(Today I Learned)
- 여전히 변수명에 대한 고민이 많이 든다. 이번 문제를 풀때 헷갈렸던 것은 내가 사용한 변수명이었다. array와 sortedArray, ansArray... 이렇게 많은 array들 때문에 헷갈려서 잘못된 변수를 사용하기도 했다. 어떻게 더 깔끔하게 변수명을 지을지 고민이 필요하다.