개발/Swift
[Swift] 큰수만들기 코딩테스트 프로그래머스
덤벨로퍼
2022. 2. 9. 15:32
해결 방법
주어진 숫자에서 앞숫자 < 뒷숫자 인경우 앞숫자를 지워주고
k 만큼 제거될때까지 number 를 반복시켜주면됨
func solution(_ number:String, _ k:Int) -> String {
var arr = number.map{String($0)}
var removeCount = 0
while k != removeCount {
for i in 0..<arr.count{
if(arr[i]<arr[i+1]){
arr.remove(at: i)
removeCount += 1
break
}
}
}
return arr.joined()
}
하지만 제거할 숫자가 남았는데도 배열이 내림차순 정렬이 되어버렸다면
더이상 지울수없어진다. 이때는 마지막에서부터 남은 갯수만큼 지워주면 된다.
if(i == arr.count-2){
arr.removeLast()
removeCount += 1
break
}
전체 코드
func solution(_ number:String, _ k:Int) -> String {
var arr = number.map{String($0)}
var removeCount = 0
while k != removeCount {
for i in 0..<arr.count{
if(arr[i]<arr[i+1]){
arr.remove(at: i)
removeCount += 1
break
}
}
if(i == arr.count-2){
arr.removeLast()
removeCount += 1
break
}
}
return arr.joined()
}
실패 해결 방법
가장 작은 수들을 k만큼 제거시킨다.
예로 4177252841 k = 4인경우
에서는 1이 2개 2가 2개이므로 1,2를 다지우면 477584가 가장큰수
func solution(_ number:String, _ k:Int) -> String {
var arr = number.map{String($0)}
var removeCount = 0
//
func remove(findNumber:Int){
for i in 0..<arr.count{
if(removeCount == k) {
print("break")
break
}
if(Int(arr[i]) == findNumber){
arr.remove(at: i)
removeCount += 1
//지워지면 arr 변경된거로 재귀
print("currentArray \\(arr) \\(removeCount)")
remove(findNumber:findNumber )
break
}else{
//마지막이면 1증가해서 재귀
if(i == arr.count-1){
print("call remove from last")
remove(findNumber: findNumber+1)
}
}
}
}
remove(findNumber: 1)
print(arr.joined())
return arr.joined()
}