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