https://school.programmers.co.kr/learn/courses/30/lessons/49993
def solution(skill, skill_trees):
answer = 0
for i in range(len(skill_trees)):
dic = {}
isTrue = True
for j in range(len(skill)):
dic[skill[j]] = 99
if skill[j] in skill_trees[i]:
dic[skill[j]] = skill_trees[i].index(skill[j])
arr = list(dic.values())
for k in range(0, len(arr)-1):
if arr[k] > arr[k+1]:
isTrue=False
break
if isTrue:
answer += 1
return answer
해당 문제는 문제를 이해하기 쉬웠다.
skill이 CBD라면 skill_trees에 그 순서대로 들어가 있어야 한다.
다만 skill에 없는 스킬들은 순서에 상관없이 들어갈 수 있고, D를 skill_trees에 넣지 않고 C와 B만 넣어서 skill_trees를 완성할 수 있다.
코드는 skill_trees for문으로 시작.
딕셔너리를 만든다.
딕셔너리는 skill에 나와있는 모든 스킬을 담는데, 초기 값을 99로 한 이유는 스킬트리[i]의 최대 길이가 26이하이기 때문이다.
만일 D를 배우기 않고 C와 B만,
즉, "AECB" 상태라면 무난하게 통과한다.
반대로 "BDA" 상태라면 딕셔너리에 아래와 같이 저장된다.
dic = { 'C':99, 'B':0, 'D':1 }
C가 나와있지 않더라도 C는 99로 선언된 상태.
딕셔너리의 value값만 뽑아 첫번째(C)가 두번째(B)보다 더 크므로 False가 된다.
'알고리즘' 카테고리의 다른 글
프로그래머스) 방문 길이-python (0) | 2023.01.26 |
---|---|
프로그래머스) 할인행사-python (0) | 2023.01.26 |
프로그래머스)주차 요금 계산-python (0) | 2023.01.24 |
프로그래머스) 압축-python (0) | 2023.01.24 |
프로그래머스 (0) | 2023.01.23 |