본문 바로가기
LeetCode

1221. Split a String in Balanced Strings

by 싼쵸 2022. 6. 10.
반응형

문제

1221 문제 이미지

R과 L을 split후 R, L이 몇 개가 동일하게 있는지 체크해 리턴하는 문제다.

 

내 현재 풀이

/**
 * @param {string} s
 * @return {number}
 */
var balancedStringSplit = function(s) {
   let cnt = 0;
    let times = 0;
    for(let i of s){
          if(i === 'R'){
            cnt++
        }else{
            cnt--
        }
        if(cnt === 0) times++
    }

    return times
};

풀었던 문제인데 고민를 하는데 방법이 잘 떠오르지 않아 제공해주는 힌트를 보고 해결했다. 의외로 풀이는 간단했다.

'R'를 기준으로  R 이면 1을 더하고 L이면 1을 뺀다. 그리고 체크하는 수가 0이 되면  횟수를 증가시킨다. 이렇게 하면 0이 된다는 것을 똑같은 연속되는 문자열 속에 어디까지가 연속되고 달라지는지는 지 확인이 가능하다. 그래서 힌트를 보고 운 좋게 해결할 수 있었다.

 확실히 아직 이런 패턴을 파악해 방법을 생각하는 쪽은 아직 쉽지않다 ㅠ

내 예전 풀이

/**
 * @param {string} s
 * @return {number}
 */
var balancedStringSplit = function(s) {
    let cnt = 0;
    let balance = 0;
    s.split('').map(a =>{
        a === 'R' ? cnt++ : cnt--
     if(cnt === 0){
        balance++
     }
    })
    return balance
};

신기하게 풀이는 거의 동일하다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

다른 사람 풀이

var balancedStringSplit = function(s) {
    
    let matches = 0;
	const stack = [];

	stack.push(s[0]);

	for (let i = 1; i < s.length; i++) {

		const top = stack[stack.length - 1];

		if (top !== undefined && top !== s[i]) {
			stack.pop()
		} else {
			stack.push(s[i]);
		}

		if (stack.length === 0) {
			matches += 1;
		}
	}

	return matches;
};

스택 데이터를 활용해서 풀이해서 신기해서 가져왔다. 이해는 잘안간다 ㅠㅠ

반응형

'LeetCode' 카테고리의 다른 글

1773. Count Items Matching a Rule  (0) 2022.06.13
1859. Sorting the Sentence  (0) 2022.06.12
1389. Create Target Array in the Given Order  (0) 2022.06.09
1528. Shuffle String  (0) 2022.06.08
1678. Goal Parser Interpretation  (0) 2022.06.07

댓글