TIL/알고리즘 공부

프로그래머스 Lv. 1 Swift 알고리즘 - 명예의 전당(1)

여의도사노비 2022. 12. 27. 16:45
728x90

이번 문제는 간단했다.

글이 너무 어렵게 쓰여있어 솔직히 몇번 더 읽고 문제를 풀었는데, 역시 테스트 케이스를 보면 이해가 금방 간다.

 

결국 k번째까지 나오는 값들은 전부 배열에 저장해두고 k+1번째 나오는 값들을 k번까지 나왔던 값들과 비교하여 최소값은 날리고 새로운 값을 추가하면 되는 문제였다. 그리고 추가가 끝난 뒤 새롭게 최솟값을 찾아 배열에 저장하면 답을 구할 수 있었다.

 

 

 

이 문제를 풀면서 생각한 논리적 흐름

 
  1. k번째 값까지는 전부 Array에 쌓는다.
  2. k+1번째 값부터 누적된 Array 내에 있는 원소들과 값을 비교한다.
  3. k+1번째 값이 Array를 sort해서 나온 가장 작은 숫자보다 크다면,
  4. sorteaArray 내부의 원소중 가장 작은 값을 지워준다.(sortedArray.removeLast)
  5. 그리고 k+1번째 값을 넣어준다.
  6. 이렇게 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)

  1. 여전히 변수명에 대한 고민이 많이 든다. 이번 문제를 풀때 헷갈렸던 것은 내가 사용한 변수명이었다. array와 sortedArray, ansArray... 이렇게 많은 array들 때문에 헷갈려서 잘못된 변수를 사용하기도 했다. 어떻게 더 깔끔하게 변수명을 지을지 고민이 필요하다.