파이썬 알고리즘

[파이썬] 프로그래머스 lvl2. 영어 끝말잇기

뜻 지, 깨달음 오 2023. 3. 7. 05:57

 

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

 

프로그래머스

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

programmers.co.kr

 

 

이런식으로 이미 언급한 단어를 또 말하거나, 아니면 앞단어의 마지막 글자가 그 다음의 첫 글자랑 다르면 틀린 사람을 알려주면 된다.

 

1. 앞 단어의 마지막 글자가 그 다음의 첫 글자랑 다른 경우

    for i in range(1, len(words)):
        if words[i][0] != words[i-1][-1]:

끝말잇기에서 첫번째 사람이 틀릴 리는 없으니까 두번째 사람부터 확인해준다.

 

2. 언급한 단어를 또 말하는 경우

elif words[i] in words[:i-1]:

지금 단어가 그 전에 언급되었는지 확인하면 된다.

 

 

<전체 코드-수정 전>

def solution(n, words):
    flg = 0
    turn = 0
    who = 0
    answer = []
    for i in range(1, len(words)):
        if words[i][0] != words[i-1][-1]:
            if (i+1)%n==0:
                turn = (i+1)/n
                who = n
            else:
                turn = i//n +1
                who = (i+1)%n
            answer.append(who)
            answer.append(turn)
            flg = 1
            return answer
        elif words[i] in words[:i-1]:
            flg = 1            
            if (i+1)%n==0:
                turn = (i+1)/n
                who = n
            else:
                turn = i//n +1
                who = (i+1)%n
            answer.append(who)
            answer.append(turn)
            return answer
        else:
            continue
    
    if flg == 0:
        return [0,0]

 

<전체코드-수정 후>

def solution(n, words):
    flg = 0
    turn = 0
    who = 0
    for i in range(1, len(words)):
        if words[i][0] != words[i-1][-1] or words[i] in words[:i-1]:
            if (i+1)%n==0:
                turn = (i+1)/n
                who = n
            else:
                turn = i//n +1
                who = (i+1)%n
            flg = 1
            return [who, turn]
        else:
            continue
    
    if flg == 0:
        return [0,0]

for문 다 돌았을때 오답자가 없으면 [0,0] return하는건 flg으로 해결했다