leetcode(리트코드)-926 Flip String to Monotone Increasing(PYTHON)
leetcode(리트코드)-926 Flip String to Monotone Increasing(PYTHON)
leetcode 926 - Flip String to Monotone Increasing 문제입니다.
1. 문제
https://leetcode.com/problems/flip-string-to-monotone-increasing/
2. Input , Output
3. 분류 및 난이도
Medium 난이도 문제입니다.
4. 문제 해석
- Monotone이란 내리막이 없는 수를 말합니다.
- “00000” 이나 “11111”, “0001111”와 같은 수를 말합니다.
- 수를 0이나 1로 뒤집을 수 있을 때 최소한으로 뒤집어서 Monotone를 만들어야합니다.
- 그 수를 리턴하세요.
5. code
코드설명
- brute하게 풀면 시간초과가 나옵니다.
- “01”이 되는 구간을 찾아서 점화식을 구해서 풀었습니다.
- 점화식의 내용은 “01”구간에서 왼쪽구간에서 1의 개수
- 오른쪽 구간에서 남은 요소의 숫자 - (총 1의개수에서 + 왼쪽에 나온 1)의 갯수를 뺍니다.
- 왼쪽구간에서 구한 수와 오른쪽에서 구한 수를 더하면 됩니다.
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution:
def minFlipsMonoIncr(self, s: str) -> int:
#re
sz = len(s)
totalone = s.count('1')
totalzero = s.count('0')
if totalone == sz or totalzero == sz :
return 0
zero = 0
one = 0
res = 987564321
for i in range(sz-1) :
if s[i] =='0' and s[i+1] == '1' :
res = min(res, sz - i - 1 - totalone + 2 * one)
if s[i] == '0':
zero += 1
else :
one += 1
return min(res, sz - s.count('1'), sz - s.count('0'))
6. 결과 및 후기, 개선점
필요시 c++로 짜드립니다.
설명이 필요하다면 댓글을 달아주세요.
This post is licensed under CC BY 4.0 by the author.