코틀린-안드로이드

6일차)알고리즘 문제(문자열 나누기)

songyooho 2024. 5. 28. 19:24

>알고리즘 문제

1. 문제 설명

 

2. 솔루션

class Solution {
    fun solution(s: String): Int {
        var answer: Int = 0
        answer=sep(s)
        
        return answer
    }
    
    fun sep(s:String):Int{
        
        //1.문자 하나만 남은 경우
        if(s.length==1){
            return 1
        }
        
        var first=1
        var others=0
        
        var fChar=s[0]
        var idx=1
        
        while(first!=others&&idx<s.length){
            if(s[idx]!=fChar){
                others++
            }
            else{
                first++
            }
            idx++
        }
        
        //2. 안 잘리고 끝까지 읽는 경우
        if(idx==s.length){
            return 1
        }
        
        //3. 중간에 잘리는 경우
        return 1+sep(s.substring(idx))
        
    }
}

1)재귀함수를 이용

2)while문을 이용해 문자열 분해: 문제에서 제시된 조건인 첫글자와 같은 문자수와 다른문자수가 같아지는 경우와 끝까지 읽는 경우를 while문의 종료조건으로 둠.

2)세 가지 경우로 나누어 함수 구성

<1>문자 하나만 남은 경우: 더 자를 수 없으므로 종료하며 문자열 개수 1개 추가

 =>이후 경우의수는 문자가 최소한 두 개 이상이므로 첫 문자를 읽은 뒤에 while문 시작

<2>안 잘리고 끝까지 읽는 경우: 이 또한 더 이상 자를 수 없으므로 종료하며 문자열 개수 1개 추가

<3>중간에 잘리는 경우: 잘려나간 문자열이 존재하므로 문자열 개수 1을 더하고 남은 문자열로 다시 함수 실행