⚡️algorithm/accepted

[프로그래머스] lv.0 옹알이(1) - 반복문 주의

남남이루 2023. 2. 19. 20:10

 

https://school.programmers.co.kr/learn/courses/30/lessons/120956#

 

프로그래머스

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

programmers.co.kr

순열 조합으로 풀어 봄

틀린 풀이

from itertools import permutations
def solution(babb):
    answer = 0
    possible = ["aya", "ye", "woo", "ma"]
    cand = set()
    for i in range(1,5):
        for comb in permutations(possible, i):
            cand.add(''.join(comb))
            # if ''.join(comb) in babb:
            #     answer +=1
    for c in cand:
        if c in babb:
            answer += 1
    return answer

permutations 한 거를 babb에 있는 지를 찾으면, 중복이 있을 수 있어서
babb이 permutations 조합에 들어있나를 찾아야 함을 알게 됨.

for target in targetlist:
    if target in searchlist:
        answer += 1
  1. 조합 리스트를 하나씩 babb에서 찾았을 때, case8에서 걸리는 걸 보고
    => set으로 자료구조 바꿔서 해봤는데 여전히 8에서 걸림
  2. babb에 중복이 있을 수 있어서 babb를 하나씩 잡고 조합 리스트에서 찾아야 오류에 안걸리나 보다
    그래서 위에 조합 만들 때 한번에 찾는 거로는 안되는 구나

고친 풀이

from itertools import permutations
def solution(babb):
    answer = 0
    possible = ["aya", "ye", "woo", "ma"]
    cand = set()
    for i in range(1,5):
        for comb in permutations(possible, i):
            cand.add(''.join(comb))

     for s in babbling:
         if s in cand:
             answer+=1
     return answer

targetlist: permutation 조합리스트
searchlist: babbling 옹알이 가능한 지 검사할 리스트
둘의 어떤 걸 기준으로 for 문 돌릴 지, 잘 생각해야 되는 구나

찾아낸 예외 케이스

babbling = ['aya', 'aya']