개발/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()
}