-
[프로그래머스] LV1. 문자열 나누기알고리즘 2023. 3. 9. 15:44728x90
문제
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
해내버렸다,,,'알고리즘' 카테고리의 다른 글
[프로그래머스] LV1 햄버거 만들기 (0) 2023.03.09 [프로그래머스] LV1. 최소직사각형 (0) 2023.03.09 [프로그래머스] LV1. 푸드 파이트 대회 (0) 2023.03.09 [프로그래머스] LV1. 명예의 전당(1) (0) 2023.03.09 [프로그래머스] LV1. 크기가 작은 부분 문자열 (0) 2023.03.09