CS기초/코딩테스트

LeetCode 1221 (Easy) Split a String in Balanced Strings

오늘의 나1 2021. 2. 24. 23:08
출처: leetcode.com/problems/split-a-string-in-balanced-strings/
 

Split a String in Balanced Strings - 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

문제

한글 번역은 아래 더보기를 클릭해주세요.

더보기

균형잡힌 문자열은 같은 수의 'L'과 'R' 문자를 갖고 있는 문자열이다.

균형잡힌 문자열 한 개가 주어졌을 때, 균형잡힌 문자열이 가장 많이 생기도록 쪼개라.

쪼개진 균형잡힌 문자열의 최댓값을 반환해라.

 

예제 1:

  • 입력: s = "RLRRLLRLRL"
  • 출력: 4
  • 설명: s는 같은 수의 'R'과 'L'을 갖고 있는 부분문자열 "RL", "RRLL", "RL", "RL"로 쪼개진다.

예제 2:

  • 입력: s = "RLLLLRRRLR"
  • 출력: 3
  • 설명: s는 같은 수의 'R'과 'L'을 갖고 있는 부분문자열 "RL", "LLLRRR", "LR"로 쪼개진다.

예제 3:

  • 입력: s = "LLLLRRRR"
  • 출력: 1
  • 설명: s는 "LLLLRRRR"로 쪼개진다.

예제 4:

  • 입력: s = "RLRRRLLRLL"
  • 출력: 2
  • 설명: s는 같은 수의 'R'과 'L'을 갖고 있는 부분문자열 "RL", "RRRLLRLL"로 쪼개진다.

 

제약조건:

  • 1 <= s.length <= 1000
  • s[i]는 'L' 이거나 'R'이다.
  • s는 균형잡힌 문자열이다.

풀이

javascript

const balancedStringSplit = function (s) {
  let answer = 0;
  let rCount = 0;

  // 균형잡힌 문자열을 순회하면서
  for (let i = 0, len = s.length; i < len; i += 1) {
    if (s[i] === 'R') {
      rCount += 1;
    } else {
      rCount -= 1;
    }

    // L과 R의 갯수가 같아질 때 === 균형잡힌 부분문자열 발견함
    // 정답 +1
    if (rCount === 0) {
      answer += 1;
    }
  }

  return answer;
};

python

class Solution:
    def balancedStringSplit(self, s: str) -> int:
        answer = 0
        rCount = 0

        # 균형잡힌 문자열을 순회하면서
        for c in s:
            if c == 'R':
                rCount += 1
            else:
                rCount -= 1
                
            # L과 R의 갯수가 같아질 때 === 균형잡힌 부분문자열 발견함
            # 정답 +1
            if rCount == 0:
                answer += 1

        return answer

결과