본문 바로가기
프로그래머스/Python

[프로그래머스] 영어 끝말잇기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트

by 우당탕탕 개발자 2023. 7. 8.
728x90
반응형

 

 

프로그래머스

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

programmers.co.kr

 

1. 문제 설명

2. 풀이과정

  1. 탈락자가 생기지 않을 경우 [0, 0]을 반환해야 하므로 기본 정답을 [0, 0]으로 설정한다. answer = [0, 0]
  2. 사용한 단어들을 저장할 리스트를 생성하고 시작 단어를 추가한다. li = [words[0]]
  3. 끝말잇기 차례를 나타낼 변수를 생성하고 1로 초기화한다. turn = 1
  4. 시작 단어는 이미 들어가 있기 때문에 다음 단어부터 각 단어를 추출한다. for i in range(1, len(words))
  5. 사용한 단어의 리스트에서 이전 값을 저장한다. pre = li[i - 1]
  6. 현재 이어질 단어를 저장한다. words[i]
  7. 만약 현재 추출한 단어가 사용한 단어의 리스트에 이미 있거나 이전 단어의 끝 문자가 이어질 단어의 시작 문자와 다르다면(끝말잇기가 올바르지 않다면) if (now in li) or (pre[-1] != now[0])
  8. 정답 리스트의 첫 번째 값을 탈락자의 번호로 저장하고 answer[0] = i % n + 1
  9. 정답 리스트의 두 번째 값을 현재 끝말잇기의 차례로 저장한다. answer[1] = turn
  10. 탈락자가 발생하였으므로 종료한다. break
  11. 현재 이어진 단어를 사용한 단어 리스트에 추가한다. li.append(now)
  12. 만약 현재 단어 순서가 마지막 사람이 부른 단어라면 차례를 1 증가시킨다. if (i % n == n - 1): turn += 1
반응형

3. 소스코드

def solution(n, words):
    answer = [0, 0]

    li = [words[0]]
    turn = 1
    for i in range(1, len(words)):
        pre = li[i - 1]
        now = words[i]

        if (now in li) or (pre[-1] != now[0]):
            answer[0] = i % n + 1
            answer[1] = turn
            break
            
        li.append(now)
        
        if (i % n == n - 1):
            turn += 1

    return answer
728x90
반응형