문제
https://programmers.co.kr/learn/courses/30/lessons/49993
처음 작성한 코드
def solution(skill, skill_trees):
answer = 0
for i in skill_trees:
tmp = []
flag = 1
for j in skill:
if j in i:
if tmp:
if tmp[-1] > i.index(j):
flag = 0
break
tmp.append(i.index(j))
else:
tmp.append(len(i))
if flag:
answer+=1
return answer
- skill을 still_trees에서 찾고 그 인덱스를 저장해뒀다가 비교후에 tmp에 넣는다. 만약 B의 인덱스보다 C의 인덱스가 뒤에 있다면 B를 먼저 배우게 되니까 조건에 충족되지 못하기 때문에 flag를 0으로 하고 break를 하여 tmp에 추가하지 않는다.
- if j in i 의 else에 tmp.append(len(i))를 한 이유는 CD와 같은 스킬트리를 막기 위해서이다. 스킬이 스킬트리에 없으면 length를 넣어서 비교할 때 if문에 항상 참이되도록 하여 break 하기 위해서 코드를 작성했다.
코드 리뷰 후
def solution(skill,skill_trees):
from collections import deque
answer = 0
for i in skill_trees:
skillList = deque(skill)
for j in i:
if j in skill:
if skillList.popleft() != j: break
else: answer+=1
return answer
- 스킬트리를 돌면서 스킬트리가 스킬에 있고, 스킬의 맨 앞 즉 순서대로 존재하면 answer+=1 하는 식으로 작성했다.
깨달은 점
- for-else 좋다.
- 처음 작성한 코드랑 다른 사람의 코드 로직이 완전 반대이다. 신기하다..
'Programmers' 카테고리의 다른 글
[프로그래머스] 메뉴 리뉴얼 (0) | 2021.01.25 |
---|---|
[프로그래머스] 수식 최대화 (0) | 2021.01.25 |
[프로그래머스] 압축 (0) | 2021.01.22 |
[프로그래머스] 후보키 (0) | 2021.01.22 |
[프로그래머스] 오픈채팅방 (0) | 2021.01.19 |