Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- 코딩테스트
- react
- 알고리즘
- 코딩테스트준비
- 개발자취업
- C++
- flutter getx
- c++ 코테
- ML
- 코테 파이썬
- 티스토리챌린지
- 안드로이드
- 파이썬
- 뷰
- Laravel
- til
- 파이썬 코테
- 99클럽
- 라라벨
- Flutter
- DP
- 백준
- 플러터
- 코딩테스트 준비
- 코테
- Python
- 항해99
- 오블완
- vue
- 개발자 취업
Archives
- Today
- Total
잡다로그
[99클럽 코테 스터디] 6일차 TIL - 탐욕법(Greedy), Split a String in Balanced Strings 본문
Algorithm
[99클럽 코테 스터디] 6일차 TIL - 탐욕법(Greedy), Split a String in Balanced Strings
날으는다람쥐 2024. 6. 5. 21:17[6일차] 탐욕법(Greedy)
문제: https://leetcode.com/problems/split-a-string-in-balanced-strings/description/

* 대충번역: 같은 수의 'L'과 'R'을 가진 문자열을 균형잡힌(balanced) 문자열이라고 한다. 균형잡힌 문자열 s가 주어졌을 때, 문자열을 쪼개었을 때도 균형잡힌 문자열이 되도록 하는 최대 문자열의 개수를 반환하라.
Solution
class Solution(object):
def balancedStringSplit(self, s):
"""
:type s: str
:rtype: int
"""
result = 0
rnum = 0
lnum = 0
for i in s:
if i == 'R':
rnum += 1
if i == 'L':
lnum += 1
if rnum == lnum:
result += 1
rnum = 0
lnum = 0
return result
Better Solution
찾아야 하는 것은 균형잡힌 문자열의 갯수이다. 균형잡힌 문자열은 L과 R의 갯수가 같아야 한다.
그러나 L과 R의 갯수를 세는 것이 필수적인 것은 아니다. "균형"의 여부만 확인하면 되기 때문이다. 어려운 문제에 응용할 수 있는 접근법 같다.
class Solution(object):
def balancedStringSplit(self, s):
count = 0
balance = 0
for char in s:
if char == 'R':
balance += 1
else:
balance -= 1
if balance == 0:
count +=1
return count
나다어
- 구해야 하는 것이 무엇인지를 정의하자. 해결의 방향성이 잡힌다.
- 쉬운 문제여서 어디가 그리디 알고리즘일까 싶긴 하지만, 차례대로(그리디는 정렬과 자주 쓰인다.) 해결해나간다는 점을 확인하면 될 것 같다.
'Algorithm' 카테고리의 다른 글
| [99클럽 코테 스터디] 7일차 TIL - 동적계획법, Counting Bits (0) | 2024.06.06 |
|---|---|
| [Python/코테] 프로그래머스 구명보트 (0) | 2024.06.05 |
| [99클럽 코테 스터디] 5일차 TIL - 탐욕법(Greedy), 체육복 (0) | 2024.06.04 |
| [99클럽 코테 스터디] 4일차 TIL - 깊이/너비 우선 탐색(DFS/BFS), Maximum Depth of Binary Tree (0) | 2024.06.03 |
| [99클럽 코테 스터디] 3일차 TIL - 깊이/너비 우선 탐색(DFS/BFS), Invert Binary Tree (0) | 2024.06.02 |
Comments