알고리즘
[프로그래머스] LV1. 문자열 나누기
j9972
2023. 3. 9. 15:44
728x90
문제
https://school.programmers.co.kr/learn/courses/30/lessons/140108
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
접근
1. while 문을 통해서 for문을 돌려서 첫번째 값과 같은지 다른지에 따라서 same과 diff값을 증가시키고 same == diff가 되는 순간에 s의 모양을 변화시키고, ans와 idx 를 증가시키는 방법을 사용했지만 런타임 에러가 뜬다
2. 내가 생각 못한점
- s의 길이가 1개일때,, 눈물의 테케 31번 진짜 ㅡㅡ 런타임 에러 계속 나서 짜증 났네,,
- 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다. ( same != diff 인 상황도 가능 하다 )
풀이
1차 풀이 ( 실패한 코드 -> 런타임 에러 7개 테스트 정도 )
def solution(s):
ans = 0
idx = 1
same = 1
diff = 0
x = s[0]
while True:
if x == s[idx]:
same += 1
idx += 1
else:
diff += 1
idx += 1
if same == diff:
ans += 1
if len(s[idx:]) >= 2:
s = s[idx:]
x = s[0]
same = 1
diff = 0
elif len(s[idx:]) == 1:
ans += 1
break
else:
break
idx = 1
return ans
2차 코드
import sys
sys.setrecursionlimit(10000)
def solution(s):
ans = 0
idx = 1
same = 1
diff = 0
x = s[0]
if len(s) == 1:
return 1
while True:
if x == s[idx]:
same += 1
idx += 1
else:
diff += 1
idx += 1
if same == diff:
ans += 1
if len(s[idx:]) >= 2:
s = s[idx:]
x = s[0]
same = 1
diff = 0
elif len(s[idx:]) == 1:
ans += 1
break
else:
break
idx = 1
elif same != diff:
if len(s[idx:]) == 0:
break
elif len(s[idx:]) == 1:
ans += 1
break
return ans
해내버렸다,,,