[Programmers] 영어 끝말잇기

퍼롱's·2021년 9월 3일

🍒Programmers🍒

목록 보기
3/11
post-thumbnail

출처 : 프로그래머스 코딩테스트 연습
https://programmers.co.kr/learn/courses/30/lessons/12981

📝 풀이(python3)

def solution(n, words):
    ls = [0] * n
    s = []
    for i, w in enumerate(words):
        if len(s)!= 0:
            if w[0] != s[-1][-1]: # 올바른 끝말잇기가 아닌 경우 break
                return[(i%n)+1, ls[i%n]+1] # 탈락하는 사람의 번호는 (i%n)+1, 차례는 ls[i%n]+1
        if w not in s:
            s.append(w)
            ls[i%n] += 1 # 올바른 끝말잇기를 한 경우 [i%n]+1번째 사람의 차례 +1
        else: # 이미 나온 단어를 얘기한 경우 break
            return[(i%n)+1, ls[i%n]+1] # 탈락하는 사람의 번호는 (i%n)+1, 차례는 ls[i%n]+1

    if words == s: #모두가 다 올바른 끝말잇기를 진행한 경우 [0,0] return
        return [0,0]

예전에 풀었던 문제인데 for문을 한 번 더 돌리는 게 효율성 면에서 안 좋은 것 같아서 for문을 빼고 바로 return하게 바꿔보았다

(예전 풀이는 맨 마지막에 else문을 추가했었다...⬇)

def solution(n, words):
    ls = [0] * n
    s = []
    for i, w in enumerate(words):
        if len(s)!= 0:
            if w[0] != s[-1][-1]:
                break

        if w not in s:
            s.append(w)
            ls[i%n] += 1
        else:
            break

    if words == s:
        return [0,0]
    else:
        for i, l in enumerate(ls):
            if l == min(ls):
                return [i+1,l+1]
profile
유지경성

0개의 댓글