본문 바로가기

알고리즘

프로그래머스) 스킬트리-python

https://school.programmers.co.kr/learn/courses/30/lessons/49993

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

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