티스토리 뷰

반응형

 

 

 

 


프로그래머스 Lv2, 큰 수 만들기 문제 설명

프로그래머스 2단계문제인 큰 수 만들기 문제는 number에서 k개의 숫자를 제거해서 최대 숫자를 구하는 문제입니다. 

 

ex) 예를들어 "1924"에서 '1', '2'를 제거하면 "94"로 가장 큰 수를 만들 수 있죠. 주의할 점은 숫자를 제거하고 나서 나온 숫자는 이전 number의 숫서 그대로 유지되어야 한다는 겁니다. 

 

 

 


프로그래머스 Lv2, 큰 수 만들기 swift 문제풀이

solution 함수를 채워보겠습니다. 

2 ~ 5행) number 문자열의 길이를 미리 nCount에 저장해놓습니다. number를 배열로 변환한 arr, 정답을 저장할 answer, 숫자 제거할 횟수를 저장할 K변수를 정의했습니다.

swift에서 String의 count 메서드는 시간복잡도가 O(N)이기 때문에 자주 접근해서 사용할 경우 위와 같이 미리 저장한 뒤 사용하면 좋습니다.

 

 

 

 

arr을 순회하면서 정답을 구하는 모습입니다. 

7 ~ 9행) 제거횟수가 존재하고 && answer에 기록한 값이 존재하고, && answer의 최근 뽑은 숫자보다 더 큰 숫자가 현재 순회하는 숫자람면 계속해서, answer에서 최근뽑은 숫자를 제거해줍니다. 제거한 자리는 아래 코드에서 새로운 숫자로 대체하게 됩니다.

 

12 ~ 14행) 더이상 제거할 필요가 없는 경우(K == 0)에는 이후의 숫자 모두를 그대로 answer에 저장하고 순회를 마칩니다.

만약 아직 제거횟수가 남았다면, 현재 순회중인 값(arr[index])을 answer에 추가해줍니다.

특정 범위의 배열을 뒤에 추가하고자 할 때는 append(contentsOf:)를 사용할 수 있습니다. 

 

 

 

 

앞서 순회를 통해서 K제거했을때의 가장 큰 숫자가 만들어 집니다. 이렇게 최종적으로 만들어지는 문자열의 길이는 nCount - K 여야 합니다. nCount - K 길이의 [Character] 배열을 String 생성자의 인자로 사용해서 String 문자열로 합칠 수 있습니다. 이렇게 그대로 정답 문자열을 반환하며 코드는 종료합니다. 

 

 

 

아래는 위에서 작성한 swift코드의 제출결과 및 전체 소스코드입니다. 참고하시기 바랍니다. 좋아요(?) + 의견 및 질문 환영합니다!  😁

 

 

 

func solution(_ number:String, _ k:Int) -> String {
    let nCount = number.count
    let arr = Array(number)
    var answer: [Character] = []
    var K = k
    for index in arr.indices {
        while K > 0 && !answer.isEmpty && answer.last! < arr[index] {
            answer.removeLast()
            K -= 1
        }
        
        if K == 0 {
            answer.append(contentsOf: Array(arr[index...]))
            break
        } else {
            answer.append(arr[index])
        }
    }
    
    return String(answer[0..<nCount - k])
}

 

 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함