DecordRay

[프로그래머스] Level1 : 옹알이(2)[Python] 본문

알고리즘/프로그래머스

[프로그래머스] Level1 : 옹알이(2)[Python]

DecordRay 2023. 2. 6. 19:25
728x90
반응형

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/133499

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

두 가지의 방법으로 풀었다.

첫번째 방법은 문제를 보고 생각나는데로 구현하여 해결을 하였고, 두번째 방법은 첫번째 방법이 코드가 너무 길고 가독성이 좋지 않아서 최대한 짧게 줄여보는 식으로 생각을 해서 풀이하였다.

 

풀이 :

첫번째 방법(단순 구현)

1. 'aya', 'ye', 'woo', 'ma' 각각에 케이스마다 조건문을 나눈 후 각 케이스마다 구현

 

두번째 방법(머리를 조금(?) 쓴 구현)

1. 문자열이 연속적으로 반복되는 경우를 판별 후(if j*2 not in i를 통해) 4가지 문자열 중 해당하는 문자열이 있으면 공백으로 치환

2. 반복문 수행 후 strip() 메소드를 통해 공백을 모두 제거해 준 후 문자열의 개수가 0일 경우 발음이 가능한 경우이므로 answer + 1을 해줌

 

코드 :

첫번째 방법(단순 구현)

def solution(babbling):
    answer = 0
    
    def possible_chk(s):
        i = 0
        chk = True
        aya_chk = 0
        ye_chk = 0
        woo_chk = 0
        ma_chk = 0

        while True:
            if i == len(s):
                break
            if s[i] == 'a':
                if s[i:i+3] == 'aya' and aya_chk == 0:
                    i = i+3
                    aya_chk += 1
                    ye_chk = 0
                    woo_chk = 0
                    ma_chk = 0
                    continue
                else:
                    chk = False
                    break
            elif s[i] == 'y':
                if s[i:i+2] == 'ye' and ye_chk == 0:
                    i = i+2
                    ye_chk += 1
                    aya_chk = 0
                    woo_chk = 0
                    ma_chk = 0
                    continue
                else:
                    chk = False
                    break
            elif s[i] == 'w':
                if s[i:i+3] == 'woo' and woo_chk == 0:
                    i = i+3
                    woo_chk += 1
                    ye_chk = 0
                    aya_chk = 0
                    ma_chk = 0
                    continue
                else:
                    chk = False
                    break
            elif s[i] == 'm':
                if s[i:i+2] == 'ma' and ma_chk == 0:
                    i = i+2
                    ma_chk += 1
                    aya_chk = 0
                    ye_chk = 0
                    woo_chk = 0
                    continue
                else:
                    chk = False
                    break
            else:
                chk = False
                break
        return chk

    for i in range(len(babbling)):
        if possible_chk(babbling[i]):
            answer += 1
    return answer

 

두번째 방법(머리를 조금(?) 쓴 구현)

def solution(babbling):
    answer = 0
    for i in babbling:
        for j in ['aya','ye','woo','ma']:
            if j*2 not in i:
                i=i.replace(j,' ')
                print("i =", i)
        if len(i.strip())==0:
            answer +=1
    return answer
728x90
반응형
Comments