Coding Test/프로그래머스(Python)
[프로그래머스/Python] Level 2_스킬트리(Summer/Winter Coding(~2018))
syunze
2022. 11. 4. 13:10
📌문제 유형
Summer/Winter Coding(~2018)
📌문제
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📌나의 문제풀이
- skill_trees내 하나의 문자 skill_order에 저장 : skill_order = {문자열 : 문자열 인덱스}
- skill_order에 skill이 있으면 num에 저장 : num = {문자열 : 문자열 인덱스}
- num의 크기 0인 경우 answer 1개 추가 (skill이 아직 시작하지 않아서 가능한 skill_tree이기 때문)
- num_sort에 num 정렬
- num_sort와 skill의 순서 확인
import collections
def solution(skill, skill_trees):
answer= 0
for tree in skill_trees:
num = {}
skill_order = {string : tree.index(string) for string in tree}
for s in skill:
if s in skill_order.keys():
num[s] = skill_order[s]
if len(list(num.keys())) == 0:
answer += 1
continue
# 숫자 순서 판별
num_sort = sorted(num.items(), key = lambda x:x[1])
num_sort = collections.OrderedDict(num_sort)
num_sort = list(num_sort.keys())
for i in range(len(num_sort)):
if skill[i] == num_sort[i]:
if i == len(num_sort)-1:
answer += 1
continue
else:
break
return answer
📌다른 사람의 풀이
1) for - else 문 : break로 끊기지 않고 수행되면 else문 실행
def solution(skill, skill_trees):
answer = 0
for skills in skill_trees:
skill_list = list(skill)
for s in skills:
if s in skill:
if s != skill_list.pop(0):
break
else:
answer += 1
return answer
2) skill[0:len(skillist)]로 skill 시작 안 한것도 포함
def solution(skill,skill_tree):
answer=0
for i in skill_tree:
skillist=''
for z in i:
if z in skill:
skillist+=z
if skillist==skill[0:len(skillist)]:
answer+=1
return answer
📌리뷰
- (skill이 아직 시작하지 않아서 가능한 skill_tree이기 때문) 이 부분이 핵심
728x90