https://school.programmers.co.kr/learn/courses/30/lessons/49993
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
def solution(skill, skill_trees):
skill_dic = {}
count = 0
for i,s in enumerate(skill):
skill_dic[s] = i
for skill in skill_trees:
users = [-1]
for s in skill:
try:
number = skill_dic[s]
if number-1 in users:
users.append(number)
else:
break
except:
pass
else:
count += 1
return count
저는 먼저 배워야 하는 스킬이 어떤 것인지 확인하기 위하여 딕셔너리 자료구조를 이용하여 스킬의 순서를 입력하여 확인하였습니다.
"CBD" 순서로 스킬을 배워야 한다면
딕셔너리(skill_dic)에는 {"C":0, "B":1, "D":2}로 저장이 됩니다.
그리고 주어진 skill_trees를 반복하면서
유저의 스킬(users)을 확인합니다.
이때 초기의 유저의 스킬(users)에는 [-1]로 지정합니다.
각 for-else문을 사용하여 각 스킬의 원소(s)를 확인하는데 이때 skill_dic에 배워야하는 스킬의 원소(s)
예를들어 A, B와 같은 스킬의 원소(s) 없다면 에러가 나오기 때문에 try, except 문으로 에러를 처리해줍니다.
스킬의 원소(s)가 있다면 스킬의 원소(s)를 스킬 딕셔너리(skill_dic[s])에서 찾게 됩니다.
만약 현재 스킬의 원소의 이전 순서(number-1)가 유저의 스킬(users)에 있다면 현재 스킬의 원소(s)를 유저의 스킬(users)에 넣어줍니다.
예를 들어 현재 스킬의 원소가 "B"라면 skill_dic에서 추출한 값은 1일 것이고 유저의 스킬(users)에는 0이 존재해야합니다.
만약 들어 있지 않다면 break사용하여 반복문을 탈출해줍니다.
마지막으로 for-else문은 for문안에서 break가 없이 무사하게 for문의 반복을 성공하면 else문이 실행되기 때문에 올바른 스킬트리를 가졌을 경우에는 count에 +1을 해줍니다.
전체 스킬트리를 반복하고 count를 반환해줍니다.
'코딩테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 가장 긴 팰린드롬 파이썬(Python) (0) | 2023.01.04 |
---|---|
[코딩테스트] 프로그래머스 더 맵게 파이썬(Python) (0) | 2023.01.03 |
[코딩테스트] 프로그래머스 방문 길이 파이썬(Python) (0) | 2022.12.31 |
[코딩테스트] 프로그래머스 점프와 순간 이동 파이썬(Python) (0) | 2022.12.28 |
[코딩테스트] 프로그래머스 영어 끝말잇기 파이썬(Python) (0) | 2022.12.27 |