made by ME
import math def solution(n, words): answer = [] num = len(words) for i in range(1, num): # 1) 단어가 잘못된 경우 if words[i-1][-1] != words[i][0]: p = (i+1)%n if (i+1)%n else n w = math.ceil((i+1)/n) return [p,w] #2) 중복이 된 경우 if words[i] in words[:i]: p = (i+1)%n if (i+1)%n else n w = math.ceil((i+1)/n) return [p,w] # 이도 저도 아닌 경우 return [0,0]
Gemini 피드백
1) 중복 단어 검사의 시간 복잡도 개선 필요
in연산자는 매번 O(i) 시간을 소모함. 전체 반복문과 합쳐지면 최악의 경우 O(N^2) 시간 복잡도가 됨set 자료구조 사용하면 O(1)만에 중복 여부를 확인할 수 있어 전체 시간 복잡도를 O(N)으로 줄일 수 있음2) 번호(p)와 차례(w) 계산식의 간결화
(i%n)+1, w는 (i//n)+1로 간소화3) 중복 코드 제거 (DRY: Don't Repeat Yourself 원칙)
or연산자로 조건을 하나로 합치기리팩토링 코드
def solution(n, words):
#1. 이미 나온 단어를 추적하기 위한 Set (첫 번째 단어로 초기화)
seen = {words[0]}
for i in range(1, len(words)):
word = words[i]
prev_word = words[i-1]
#2. 두 조건을 or 연산자로 연결 + 3. 중복되는 코드 한 번에
if word[0] != prev_word[-1] or word in seen:
# [탈락자 번호, 탈락자 차례]
return [(i%n)+1, (i//n)+1]
# 지나간 단어 추가
seen.add(word)
# 탈락자가 없는 경우
return [0,0]