본문 바로가기
Algorithm/etc

[파이썬] 프로그래머스 : 영어 끝말잇기 (Lv.2)

by 베짱이28호 2023. 7. 25.

[파이썬] 프로그래머스 : 영어 끝말잇기 (Lv.2)

 

 

프로그래머스

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

programmers.co.kr

 


풀이

0. 방향성 생각

사용할 수 있는 단어를 table 딕셔너리로 저장.

k : kick, know 등

1. table 채우기

def solution(n, words):
    
    table = {}
    for word in words:
        if word[0] not in table : table[word[0]] = {word}
        else : table[word[0]].add(word)

연산 빨라야하니까 집합으로 저장

1. table 채우기

    answer = []
    match,player = 1,1
    memory = words[0][0]
    for word in words:
        if word[0] != memory or word not in table[word[0]] or len(word)== 1:
            answer = [player,match] # 끝
            return answer
        else :
            table[word[0]].remove(word) # 사용한 단어 제거하고
            player += 1 # 다음 플레이어
            memory = word[-1] # 다음 시작단어 교체
        if player%n == 1:
            player = 1
            match += 1
    
    if not answer:
        return [0,0]

처음 단어 들어오면 시작해야하니까 메모리는 words[0][0]으로.

단어를 말하고 memory를 말한 단어의 마지막 단어로 업데이트한다.

메모리랑 시작 단어가 같고, 단어가 table[word[0]]에 있고 (사용하지 않았고), 길이가 1이 아니면
다음 플레이어로 교체, 메모리도 업데이트.
순번은 잘 n배수마다 업데이트한다.


전체코드

def solution(n, words):
    
    table = {}
    for word in words:
        if word[0] not in table : table[word[0]] = {word}
        else : table[word[0]].add(word)

    answer = []
    match,player = 1,1
    memory = words[0][0]
    for word in words:
        if word[0] != memory or word not in table[word[0]] or len(word)== 1:
            answer = [player,match] # 끝
            return answer
        else :
            table[word[0]].remove(word) # 사용한 단어 제거하고
            player += 1 # 다음 플레이어
            memory = word[-1] # 다음 시작단어 교체
        if player%n == 1:
            player = 1
            match += 1
    
    if not answer:
        return [0,0]

 

댓글