관리 메뉴

솜씨좋은장씨

[Programmers] 옹알이 (2) (Python) 본문

Programming/코딩 1일 1문제

[Programmers] 옹알이 (2) (Python)

솜씨좋은장씨 2023. 2. 20. 12:24
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 프로그래머스의 옹알이 (2) 입니다.

 

프로그래머스

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

programmers.co.kr

👨🏻‍💻 문제 풀이

1. 발음 단어의 맨 앞 단어를 key 로 발음 단어를 value 로 하는 dictionary 를 만들어 줍니다.

pronunciation = [ "aya", "ye", "woo", "ma" ]

word_dict = {
    word[0]: word for word in pronunciation
}

# word_dict = {"a": "aya", "y": "ye", "w": "woo", "m": "ma"}

2. 1번에서 만든 dictionary 를 활용하여 아기가 발음할 수 있는 옹알이 인지 아닌지 확인하는 함수를 만들었습니다.

def validate_babbling(babble, word_dict):
    is_validate = False
    
    before_use_key = ""
    
    while True:
        if len(babble) == 0:
            is_validate = True
            break
            
        key = babble[0]
        
        if key not in word_dict:
            break
            
        if before_use_key == key:
            break
            
        word = word_dict[key] 
        
        if babble[:len(word)] == word:
            babble = babble[len(word):]
            before_use_key = key
        elif babble[:len(word)] != word:
            break
    
    return is_validate

- 아기는 "aya", "ye", "woo", "ma" 발음만 가능하고 하나의 발음은 연속되지 않게만 사용할 수 있습니다.

while 반복문 안에서

while True:

- 단어의 맨 앞 단어를 key 값으로 만들고

key = babble[0]

- 이 key 값이 1번에서 만들었던 dictionary 에 없거나

if key not in word_dict:
    break

- 바로 이전에 check 했던 key 와 동일한 key 인 경우

if before_use_key == key:
    break

- word_dict 에서 key 값으로 꺼내온 단어와 맨 앞부터 word 길이 만큼 가져온 값과 word 와 다른 경우

elif babble[:len(word)] != word:
    break

-> is_validate = False

is_validate = False

- word_dict 에서 key 값으로 꺼내온 단어와 맨 앞부터 word 길이 만큼 가져온 값과 word 와 같은 경우

if babble[:len(word)] == word:

  ㄴ 현재 비교하고 있는 단어에서 앞에서 word 만큼 자른 값을 넣어주고 

    babble = babble[len(word):]

 

  ㄴ 연속으로 발음했는지 확인할때 사용하는 before_use_key 에 현재 key 값을 넣어줍니다.

    before_use_key = key

- 마지막으로 위 과정을 거친 단어의 길이가 0 일 경우 is_validate 를 True 로 바꾸어 주고 종료합니다.

if len(babble) == 0:
    is_validate = True
    break

 

3. 2번에서 만든 함수를 활용하여 아기가 옹알이로 발음할 수 있는 단어로 확인된 경우 answer 를 +1 합니다.

answer = 0

for babble in babbling:
    if validate_babbling(babble=babble, word_dict=word_dict):
        answer += 1

👨🏻‍💻 코드 ( Solution )

def validate_babbling(babble, word_dict):
    is_validate = False
    
    before_use_key = ""
    
    while True:
        if len(babble) == 0:
            is_validate = True
            break
            
        key = babble[0]
        
        if key not in word_dict:
            break
            
        if before_use_key == key:
            break
            
        word = word_dict[key] 
        
        if babble[:len(word)] == word:
            babble = babble[len(word):]
            before_use_key = key
        elif babble[:len(word)] != word:
            break
    
    return is_validate
        
        

def solution(babbling):
    answer = 0
    
    pronunciation = [ "aya", "ye", "woo", "ma" ]
    
    word_dict = {
        word[0]: word for word in pronunciation
    }

    for babble in babbling:
        if validate_babbling(babble=babble, word_dict=word_dict):
            answer += 1
    
    return answer
 

GitHub - SOMJANG/CODINGTEST_PRACTICE: 1일 1문제 since 2020.02.07

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments