티스토리 뷰
프로그래머스 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])
}
'알고리즘 정보 > Swift 알고리즘' 카테고리의 다른 글
swift zip, reduce 함수예제, 프로그래머스 음양더하기 문제풀이 (0) | 2021.04.28 |
---|---|
프로그래머스 카카오 코테문제, 비밀지도 swift 풀이 (0) | 2021.03.21 |
프로그래머스 구현문제, Lv2 스킬트리 swift 풀이 (0) | 2021.03.04 |
LeetCode swift 스택예제 Validate Stack Sequences 풀이 (0) | 2021.03.02 |
스위프트 기초정렬문제, 2693 N번째 큰 수 문제풀이 (0) | 2021.02.24 |
- Total
- Today
- Yesterday
- 백준알고리즘
- 자연어처리
- Swift 알고리즘
- 백준swift
- SwiftUI
- 알고리즘
- swift reduce
- 알고리즘문제
- publisher
- Protocol
- CoreML
- swift 문자열
- 스위프트
- swift언어
- 프로그래머스swift
- swift알고리즘
- swift문제
- swift
- swift string
- uikit
- createML
- 개발자문서
- 프로그래머스
- ios
- 컬렉션
- 김프매매
- 부스트코스
- 프로토콜
- swift 기초
- Collection
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |