문제 풀이/99클럽

99클럽 코테 스터디 2일차 TIL

동까의 코딩 2025. 1. 14. 22:45
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/60060?language=python3

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

def solution(words, queries):
    answer = []
    for st in queries:
        cnt = 0
        start = 0
        end = len(st)
        
        if st[0] == '?':
                for j in range(len(st)):
                    if st[j] != '?':
                        start = j
                        break
        elif st[-1] == '?':
            for j in range(len(st) - 1, 0, -1):
                if st[j] != '?':
                    break
                else:
                    end -= 1
        cnt = 0
        if '?' not in st[start:end]:
            for i in range(len(words)):
                if len(st) != len(words[i]):
                    continue
                if st[start:end] == words[i][start:end]:
                    cnt += 1
        answer.append(cnt)
    return answer

생각나는데로 풀이를 해주니 테스트에서 3개가 틀려서 틀리게 되었고, 다양한 방법을 보던 중 아래의 풀이를 보게되었습니다.

 

힙을 사용한 풀이를 진행하였고, 조건에 대해 간결하게 처리해주셨습니다.

def solution(words, queries):
    head, head_rev = {}, {}
    wc = []
    
    def add(head,word):
        node = head
        for w in word:
            if w not in node:
                node[w]={}
            node= node[w]
            if 'len' not in node:
                node['len'] = [len_word]
            else:
                node['len'].append(len_word)
        node['end']=True   
    
    for word in words:
        len_word = len(word)
        add(head,word)
        add(head_rev,word[::-1])
        wc.append(len_word)
        
    def search(head, querie):
        count=0
        node = head
        for q in querie:
            if q=='?':
                return node['len'].count(len_qu)
            elif q not in node:
                break
            node = node[q]
        return count

    li=[]
    for querie in queries:
        len_qu = len(querie)
        if querie[0]=='?':
            if querie[-1]=='?': 
                li.append(wc.count(len_qu))
            else: 
                li.append(search(head_rev, querie[::-1]))
        else:
            li.append(search(head, querie))
    return li

출처 : https://velog.io/@hope1213/프로그래머스-가사검색-파이썬

 

[프로그래머스] 가사검색 (파이썬)

https://programmers.co.kr/learn/courses/30/lessons/60060본 문제는 정확성과 효율성 테스트 각각 점수가 있는 문제입니다.친구들로부터 천재 프로그래머로 불리는 "프로도"는 음악을 하는 친구로부터 자신이

velog.io

 

 

오늘은 이쯤으로 마무리하고 내일 다시 풀어보면서 새로운 풀이법을 익히도록 하겠습니다.

반응형