내 솔루션 1
스택을 사용
def solution(n, words):
answer = (0,0)
stack = ()
for i in range(len(words)):
if not stack: # stack 비어있으면
stack.append(word(i))
else:
word = stack.pop()
if word(-1) != words(i)(0): # 이전 끝 글자랑, 현재 첫글자가 다르면
stack.append(words(i)) # stack에 현재 문자 추가
return answer
내 솔루션 2
1. 간단하게 문자열을 검색하면서 앞뒤 문자 비교하기
2. Counter()를 사용하여 중복 문자열을 미리 처리하십시오.
import numpy as np
from collections import Counter
def solution(n, words):
answer = (0,0)
counter_words = Counter(words)
if counter_words.most_common()(0)(1) > 1:
# 중복으로 나온 단어가 있다면 사전 처리
i = list(filter(lambda x: words(x) == counter_words.most_common()(0)(0), range(len(words))))(-1)
answer(1) = np.ceil(i / n)
answer(0) = i % n + 1
else:
for i in range(len(words)):
if i > 0 and words(i-1)(-1) != words(i)(0): # 이전 글자의 끝글자와 현재 글자의 첫글자가 다르면
print('i: ',i)
print('n: ', n)
answer(1) = np.ceil((i+1) / n)
answer(0) = i % n + 1
return answer
Tekke 10, 14, 15, 16, 18만 통과..
점화가 잘못되었습니다!!!!!!
점화식을 제대로 설정합시다.
for 문의 범위도 틀립니다..
쓰기 및 카운터 X 필요 -> 단어(i) 단어(:i)인지를 비교할 수 있습니다.
올바른 솔루션
def solution(n, words):
for i in range(1, len(words)):
if words(i-1)(-1) != words(i)(0) or words(i) in words(:i): # 이전 글자의 끝글자와 현재 글자의 첫글자가 다르거나 해당 문자가 이전 문자에서 있었는지
return ((i%n) + 1, (i//n )+ 1)
else:
return (0,0)