안녕하세요. 오늘은 프로그래머스 큰 수 만들기 문제를 풀어보도록 하겠습니다.
우선 탐욕(greedy) 알고리즘에 대해서 알아보겠습니다.
탐욕 알고리즘은 순간순간에서 local한 최적값을 선택하여 global한 최적값을 도출해나가는 알고리즘입니다.
하지만 알고리즘 예시에서 보듯이 완전하게 정렬되지 않은 경우(Heap)에는 최적값을 못찾는 단점이 있습니다.
이제 문제를 풀어보겠습니다.
이 문제는 한 숫자씩 최대값을 찾아서 answer에 넣어주면 되는 문제입니다.
첫 탐색에서는 0 ~ K 번째 까지 탐색하고 최대값은 N1 번째자리수에서 찾았을경우
두번째 탐색에서는 N1 + 1 ~ K+1까지 탐색하고 최대값은 N2번 번째자리수에서 찾았을경우
세번째 탐색에서는 N2 + 1 ~ K+2까지 탐색하고 최대값은 N2번 번째자리수에서 찾았을경우
이런 방식으로 n-k번 진행하여 globla 최적값을 찾아주면 문제가 해결됩니다.
func solution(_ number: String, _ k: Int) -> String {
let numberArray = Array(number)
var startIndex = 0
var endIndex = k
var max = 0
var answer = ""
for _ in 0..<numberArray.count - k {
var max:Character = "0"
for i in startIndex...endIndex {
if max < numberArray[i] {
max = numberArray[i]
startIndex = i + 1
}
if numberArray[i] == "9" {
max = "9"
startIndex = i + 1
break
}
}
endIndex += 1
answer += String(max)
}
return answer
}
오늘은 여기까지입니다. 질문이 있으시면 댓글로 남겨주세요.
좋은 하루 되세요.
'Algorithm Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 2018 KAKAO BLIND RECRUITMENT [1차] 프렌즈4블록 with Swift (0) | 2022.01.27 |
---|---|
[프로그래머스] 위클리 챌린지 피로도 with Swift (0) | 2022.01.26 |
[프로그래머스] 정렬 H-Index with Swift (0) | 2022.01.24 |
[프로그래머스] 스택/큐 다리를 지나는 트럭 with Swift (0) | 2022.01.22 |
[프로그래머스] Summer/Winter Coding(~2018) 배달 with Swift (0) | 2022.01.21 |