프로그래머스 연습문제
- Lv 1. 문자열 나누기 (Python)
https://school.programmers.co.kr/learn/courses/30/lessons/140108
def solution(s):
answer = 0
# 첫글자 = x
# x와 같은 글자 수 == x가 아닌 글자 수 -> 분리
# 기존 문자열에서 분리된 부분 제거 -> 반복
same_s, diff_s = 0, 0 # 같은 글자 수, 다른 글자 수
ans = [] # 분리되는 문자열을 담을 배열
x_index = 0 # x의 인덱스를 담을 변수
x = s[x_index] # 초기 x값은 맨 첫번째 문자로 설정
for i in range(0, len(s)):
# 같은 글자 수, 다른 글자 수 세기
if (x == s[i]):
same_s += 1
if (x != s[i]):
diff_s += 1
# 두 글자 수가 같으면 -> 분리
if (same_s == diff_s):
ans.append(s[x_index : i + 1]) # x부터 i까지 분리하고
x_index = i + 1 # x는 분리된 이후의 문자열에서의 첫번째 글자
if (x_index + 1 >= len(s)): # 만약 거의 다 분리되어서 이제 남아있는 인덱스를 넘어가면
ans.append(s[x_index:]) # 지금까지 읽은 문자열을 분리하고 종료
break
x = s[x_index] # x 재설정
same_s, diff_s = 0, 0 # 초기화
# 두 글자 수가 다르지만, 더 이상 읽을 글자가 없으면
if(same_s != diff_s and i+1 >= len(s)):
ans.append(s[x_index:]) # 지금까지 읽은 문자열을 분리하고 종료
break
ans = list(filter(None, ans)) # 리스트 내 '' 같은 공백 제거
answer = len(ans) # 분리된 문자열이 담긴 배열의 길이가 정답
return answer
만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다.
다른 사람 정답 코드
def solution(s):
answer = 0
sav1=0
sav2=0
for i in s:
if sav1==sav2:
answer+=1
a=i
if i==a:
sav1+=1
else:
sav2+=1
return answer
이런 . . . 내가 너무 복잡하게 푼 것 같기도 하다 . . . ( ◠‿◠ )
▶️ 리스트이름 = list(filter(None, 리스트이름))
참고 : https://jinmay.github.io/2019/06/30/python/python-how-to-delete-empty-string-in-list/
sample_list = ['', 'a', '', 'abc', 'qdsf']
sample_list = list(filter(None, sample_list))
>>> ['a', 'abc', 'qdsf']