[leetcode 38] Count and Say
38. Count and Say
해결 과정
같은 숫자 반복되는지, 몇번 반복 되는지를 검사하고 반복된 횟수와 해당 수를 합쳐 반환하는 메소드가 필요했다. 그리고 이 메소드에 최초 입력값은 “1”.
같은 숫자가 본인(n
)뿐이면 “1n” 이므로 calculate()의 count 초기값은 1.
num은 for문을 돌면서, 현재 idx의 값(n
)이 다음 idx의 값과 같으면 ++count
하고, 다르다면 “구해놓은 count
+ 현재 숫자n
” 을 result 값에 더한다.
이때, idx+1
을 비교하고 있기때문에, IndexOutOfException
이 발생하지 않도록 idx 값을 체크해주며 마지막 숫자까지 검사가 잘 되는지 검증해본다.
코드
fun countAndSay(n: Int): String {
var result = "1"
for (i in 1 until n) {
result = calculate(result)
}
return result
}
private fun calculate(num: String): String {
var result = ""
var count = 1
num.toCharArray().forEachIndexed { idx, n ->
if (idx != num.length - 1 && num[idx] == num[idx + 1]) {
++count
} else {
result = result + count + n
count = 1
}
}
return result
}
배운 점
idx != num.length - 1
비교를 하기때문에 마지막 수는else
분기를 타며, “구해놓은count
+n
” 을 계산할 수 있다.
Leave a comment