개발/algorithm

[프로그래머스][level2] 영어 끝말잇기 -python

zzi_on2 2022. 2. 8. 15:29

문제 링크

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

 

코딩테스트 연습 - 영어 끝말잇기

3 ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"] [3,3] 5 ["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"] [0,0]

programmers.co.kr

 

풀이

- set을 이용해서 등장한 문자인지 확인해주고 end에 끝문자를 저장해서 비교해주었다.

def solution(n, words):
  answer = []
  
  # 끝말잇기에 등장한 단어 저장 
  word = set()
  # 전 단어의 마지막 알파벳 저장 
  end = ''

  for i in range(len(words)):
    # 끝말잇기 시작이라면 word에 단어 추가하고, end 갱신 
    if not word :
      end = words[i][-1]
      word.add(words[i])
    else :
      # 등장한 단어거나 끝 문자와 시작 문자가 같지 않으면 
      if words[i] in word or words[i][0] != end:
        # 사람의 번호 
        num = (i+1) % n 
        if num == 0 :
          answer.append(n) 
        else:
          answer.append(num)
        # 차례 
        case = i // n  + 1
        answer.append(case)
        return answer
     # 등장하지 않은 단어이고 끝 문자와 시작 문자가 같다면 word에 추가 후 end 갱신 
      else :
        word.add(words[i])
        end = words[i][-1]
  
  return [0,0]

- 사람의 번호는 아래처럼 계산했는데 

# i는 배열의 인덱스 
num = (i+1) % n 
if num == 0 :
  answer.append(n) 
else:
  answer.append(num)

다른 사람의 풀이를 보니깐 아래처럼 더 간단하게 표현할 수 있었다. 

num = i % n + 1