문제
https://school.programmers.co.kr/learn/courses/30/lessons/12981
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
해당 문제는 끝말잇기 조건을 충족하지 못한 사람의 번호와 차례를 리스트 형태로 반환하는 문제이다. 문제에서 주어진 끝말잇기 조건과 제약은 다음과 같다.
- 2명 이상 끝말잇기를 시작할 것
- 같은 단어를 반복해선 안됨
- 현재 단어의 끝 알파벳과 다음 단어의 처음 알파벳이 서로 같아야 함
- 사람의 번호 찾기
일단 끝말잇기는 사람이 번갈아서 돌아감으로 itertools에 있는 cycle함수를 통해 나타낸다면, 단어를 순회함에 따라서 조건을 충족 못한 사람의 번호를 알 수 있도록 코드를 작성하였다.
- 사람의 차례 찾기
만약 주어진 사람의 번호가 n에 도달한다면, 차례 숫자인 cycle_number가 1씩 증가하도록 코드를 작성하였다.
- 똑같은 단어를 반복한다면
똑같은 단어의 반복을 막기 위해서, word_case 리스트를 만들어 words를 순회할 때 조건을 충족한다면 word_case에 값을 추가하도록 코드를 작성하였다.
🖥️ main.py
from itertools import cycle
from typing import List
def solution(n, words) -> List[int]:
"""
끝말 잇기 인원은 무조건 2명 이상부터 시작
했던 단어를 또 사용하거나, 앞 뒤 문자가 달라선 안됨
"""
cycle_number = 1
word_case = []
alphabet = ""
for word, index in zip(words, cycle(range(1, n + 1))):
if alphabet == "":
alphabet = word[-1]
word_case.append(word)
elif alphabet != word[0] or word in word_case:
return [index, cycle_number]
elif alphabet == word[0]:
alphabet = word[-1]
word_case.append(word)
if index == n:
cycle_number += 1
return [0, 0]
해당 문제가 2018년에 나온 문제라 그런가, 파이썬 3.9 이상의 문법을 지원하지 않는 오류가 나타났다. 그래서 반환 값을 나타 낼 때 typing 모듈을 이용하여 나타내었다.
'Algorithm > Programmers' 카테고리의 다른 글
프로그래머스 LV2 JadenCase 문자열 만들기 (0) | 2023.07.19 |
---|---|
프로그래머스 LV2 튜플 (0) | 2023.07.17 |
프로그래머스 LV2 최솟값 만들기 (0) | 2023.07.17 |
프로그래머스 LV2 올바른 괄호 (0) | 2023.07.17 |
프로그래머스 LV2 프로세스 (0) | 2023.07.11 |