Daily LeetCode Challenge - 38. Count and Say

Min Young Kim·2022년 10월 18일
0

algorithm

목록 보기
10/198

Problem From.
https://leetcode.com/problems/count-and-say/

오늘 문제는 순차적으로 알고리즘을 세워서 해결하는 문제였다.

문제가 조금 헷갈리게 쓰여있는데, 요약하자면

1단계는 default 값으로 1
2단계는 1개의 1이 있으니까 11
3단계는 2개의 1이 있으니까 21
4단계는 1개의 2, 1개의 1이 있으니까 1211 이 된다.

이런식으로 반환해주는 함수를 구현하는 문제이다.

특별하게 복잡한 알고리즘 없이, 1부터 주어진 숫자까지 반복해가면서
앞에서부터 차례로 숫자를 보며, 같은 숫자가 나오면 cnt 에 1을 더해주고 다른 숫자가 나오면
stringBuilder 에 cnt 와 해당 전 숫자를 추가하도록 하였다.

나중에 문자의 길이가 길어질것을 대비하여 stringBuilder 로 메모리 사용을 줄이도록 하였다.

class Solution {
    fun countAndSay(n: Int): String {
        
        var answer = "1"
        var cnt = 1
        
        while(cnt != n) {
            answer = changeToSay(answer.toString())
            cnt += 1
        }
        return answer
    }
    
    private fun changeToSay(numbers : String) : String {
        
        var temp = StringBuilder()
        var prev = numbers[0]
        var cnt = 0
        
        for(char in numbers.toString()) {
            
            if(char == prev) {
                cnt += 1
            }else {
                temp.append(cnt)
                temp.append(prev)
                cnt = 1
            }
            prev = char
        }
        
        temp.append(cnt)
        temp.append(prev)
        
        return temp.toString()
        
    }    
}

이렇게 단계적으로 푸는 문제도 순차적으로 생각할 수 있어서 좋은것 같다.
싫어요 수를 보면 다른 사람들은 그렇게 좋아하지는 않는것 같지만..ㅎㅎ

profile
길을 찾는 개발자

0개의 댓글