https://school.programmers.co.kr/learn/courses/30/lessons/12981
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(n, words):
stack = []
cnt = -1
for i in words:
cnt += 1
if len(stack) ==0:
stack.append(i)
answer = [(cnt)%n+1,cnt//n+1] #[나머지로 반환+1하여 1,2,3반복/몫 반환으로 각 사람 실행횟수]
elif i in stack:
answer = [(cnt)%n+1,cnt//n+1] # 멈출 때의 cnt로 계산
break
elif stack[-1][-1] == i[0]:
stack.append(i)
answer = [(cnt)%n+1,cnt//n+1]
else:
answer = [(cnt)%n+1,cnt//n+1]
break
if len(stack)==len(words): # 글자 끝까지 정답이 나오지 않은 경우
answer = [0,0]
return answer
answer = [ (cnt)%n + 1, cnt//n +1 ] 이 부분을 밖으로 꺼내려 하니깐, if len(stack) == len(words) 에서 마지막 글자에서 오답이 나오는 경우를 걸러내지 못하는 게 문제였다.
그래서 조건문마다 반복적으로 결과를 출력하는 연산을 했는데, 불필요한 코드 작성을 줄이는 방법을 생각했다.
def solution(n, words):
stack = []
for idx, word in enumerate(words):
if stack and (stack[-1][-1] != word[0] or word in stack): # if stack을 넣어, index오류 방지
return [(idx % n) + 1, (idx // n) + 1]
stack.append(word)
return [0, 0]
짧게 완성
728x90
댓글