문제
https://school.programmers.co.kr/learn/courses/30/lessons/49993?language=python3#
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
tech라는 딕셔너리를 선언했고, 키는 스킬이고 밸류는 그 스킬을 배우기 위한 직전 스킬을 넣어주었다.
따라서 만약 A스킬이 skill에 있고, 그 스킬을 배우기 위해서 무엇을 배워야하는지 tech를 통해 알 수 있다. (1부터 넣은 이유는 첫 스킬은 선행스킬이 없기 때문에)
이후 skill_trees 를 순회한다. 한 스킬셋마다 가능한지 여부를 따져주기 위해서 possible을 선언하고, 내가 지금 배운 스킬들을 저장하기 위해 learned 라는 set을 선언한다.
이후 스킬을 하나씩 순회하면서 내가 지금 배우려는 스킬이 tech에 존재한다면, 그 스킬의 선행스킬을 내가 배웠는지 검사해준다. 만약 tech에 있는데 내가 배우지 않았다면 잘못된 테크트리이므로 바로 break를 수행한다.
코드
def solution(skill, skill_trees):
answer = 0
tech = {}
for i in range(1, len(skill)):
tech[skill[i]] = skill[i-1]
for sk in skill_trees: # 스킬셋 목록
possible = True
learned = set()
for s in sk: # 지금 배울려는 스킬
if s in tech: #만약 테크트리에 존재하는 스킬이라면
if tech[s] not in learned : #선행스킬을 배우지 않았다면
possible = False
break
learned.add(s)
if possible:
answer +=1
return answer
후기
뭔가 함정이 있을까 했는데 따로 없었다.
'프로그래머스' 카테고리의 다른 글
LV3 풍선 터트리기 (Python) (1) | 2023.10.24 |
---|---|
LV2 괄호 변환 (Java) (1) | 2023.10.09 |
LV2 방문길이 (0) | 2023.09.28 |
LV2 2개 이하로 다른 비트 (1) | 2023.09.27 |
LV2 n^2 배열 자르기 (0) | 2023.09.26 |