반응형
문제
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 |
댓글