이코테의 문자열 뒤집기.
0과 1로만 이루어진 문자열 S에서, 문자열 내 모든 숫자를 전부 같게 만들때
연속된 하나 이상의 숫자를 잡고 모두 뒤집는게 가능한 상황 (카운트 1번으로 처리) 에서 최소한으로 뒤집는 횟수는?
# 이코테 문자열뒤집기 - 313페이지
# 1을 0으로 또는 0을 1으로 해서 모든 숫자를 같게 만들기 (0,1로만 이루어짐),
# 한 카운트는 한번에 연속된 하나이상의 숫자를 잡고 모두 뒤집는것... 이때 카운트 수 return하기
def solution(s):
def flip(ss, n):
cnt=0
s=ss[:]
l,r=0,0
while r < len(s):
if s[r]==n:
print(l,r,s[r],'Go')
r+=1
l+=1
else:
while r<len(s) and s[r]!=n:
r+=1
print(l,r,'Cnt++')
cnt+=1
l=r
return cnt
answer=0
count = min(flip(s, '0'), flip(s,'1'))
return count
나의 풀이 : 더블포인터 아이디어로 구현,
flip이라는 함수를 통해, 0으로 뒤집을때, 1로 뒤집을때 두번 시행.
n을 인자로 하여 어떤 숫자로 뒤집을지 받은다음, r을 기준으로 s[r]이 n과 같으면 그대로 지나감 (뒤집을 필요가 없으니까)
다르다면, 그 순간 while문에서 뒤집어야할 녀석들까지 점핑
최종, l,r은 뒤집고난 다음 인덱스로 넘어가고, count는 1 증가
책 풀이
def solution(s):
cnt0=0
cnt1=0
if s[0]=='1':
cnt0+=1
else:
cnt1+=1
for i in range(len(s)-1):
if s[i] != s[i+1]:
if s[i+1]=='1': cnt0+=1
else:cnt1+=1
print(cnt0, cnt1)
s='0001100'
solution(s)
훨씬 깔끔..
딱 한번 돌아가면서, cnt0, cnt1을 동시에 올려버림
'CODING TEST' 카테고리의 다른 글
최단경로 (0) | 2021.06.24 |
---|---|
이코테 - 1로만들기, 개미전사 (0) | 2021.06.21 |
2021 Dev-Matching: 웹 백엔드 개발자 (상반기) 행렬 테두리 회전하기 파이썬 (0) | 2021.06.18 |
이코테 _ 떡볶이떡 (0) | 2021.06.18 |
파이썬 Python KAKAO_2019 인턴- 불량사용자 (0) | 2021.06.18 |