알고리즘🅰/리트코드

[리트코드] 38. Count and Say

개발조각 2022. 10. 3. 18:01
728x90
반응형

문제

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

 

Count and Say - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제만 이해하시면 쉬운문제입니다.

 


해결방안

아마 이미지를 보시면 이해가 가실 거예요

간단하게 설명을 하자면

만약 n=6을 구한다고 가정하면

n=5일 때 결괏값이 111221입니다.

n=6에서는 이전 값 n=5일 때를 분석을 해줍니다.

분석을 할 때 이어지는 값이 똑같은 숫자만큼 구분해주시고요.

예시를 들자면 n = 5 → 111221

  • 111, 22, 1

이런 식으로 구성을 해줍니다.

 

  • 111 : 1이 3개 있음 → num: 1, count: 3
  • 22 : 2가 2개 있음 → num: 2, count: 2
  • 1 : 1이 1개 있음 → num: 1, count: 1

이렇게 되고 이걸 다시 이어 붙여주시면 됩니다. count + num 이런 식으로 요.

'31' + '22' + '11' = '312211'

이렇게 됩니다.


소스코드

var countAndSay = function(n) {
    if(n === 1) return '1';
    
    let str = '1';
    for(let i=2; i<=n; i++){
        let str2 = '';
        let count = 1;
        for(let j=0; j<str.length; j++){
            let num = str[j];
            if(str[j] === str[j+1]) count++;
            else{
                str2 += `${count}${num}`;
                count = 1;
            }            
        }
        str = str2;
    }
    return str;
};

countAndSay(1)이면 1이기 때문에

1일 경우 빼고 2일 때부터 반복문을 돌려주었습니다.

 

728x90
반응형