본문 바로가기
Problem Solving

[Swift] 프로그래머스 명예의 전당 (1)(lv. 1)

by DuncanKim 2023. 2. 9.
728x90

[Swift] 프로그래머스 명예의 전당 (1)(lv. 1)

 

1. 문제

https://school.programmers.co.kr/learn/courses/30/lessons/138477

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

2. 접근

honorList 라는 배열의 크기가 k가 넘지 않게끔 조절해주면서, 매번 내림차순으로 정렬하면서 마지막 인덱스의 원소를 계속 구해주면 되는 문제였다. honorList의 크기가 3이 되는 순간부터, 마지막 숫자가 score[i] 보다 작다면, honorList의 마지막 수를 새로운 score[i]로 바꾸고 sort를 다시 해주고, 맨 마지막 인덱스의 수를 answer에 append한다.

 

이렇게 score 전부를 순회하고 나면, 문제에서 요구하는 바와 같이 구현을 할 수 있다.

 

정렬과 배열을 제한적으로 사용하는 로직을 구현하는 것이 핵심이었다.

 

3. 코드

import Foundation

func solution(_ k:Int, _ score:[Int]) -> [Int] {
    var honorList = [Int]()
    var answer = [Int]()
    for i in 0 ... score.count - 1 {
        if i <= k - 1 {
            honorList.append(score[i])
            honorList.sort(by: >)
            answer.append(honorList[honorList.count - 1])
        } else {
            if honorList[k - 1] >= score[i] {
                answer.append(honorList[k - 1])
            } else {
                honorList[k - 1] = score[i]
                honorList.sort(by: >)
                answer.append(honorList[k - 1])
            }
        }
    }
    
    return answer
}
728x90

댓글