스킬트리
코딩테스트 연습 > S/W Coding(~2018) > 스킬트리
https://programmers.co.kr/learn/courses/30/lessons/49993#fnref1
# 문제 정리
- 입력: 알맞은 순서를 가지고 있는 확인된 문자열, 확인되지 않은 문자열 리스트
- 과정:
1. 확인되지 않은 문자열 리스트의 원소(문자열)의 원소가 확인된 문자열에 포함되는지 확인한다.
2. 포함되는 문자만 남겨 하나의 문자열로 형성한다.
3. startswith()를 사용하여 확인된 문자열이 형성된 문자열로 시작될 경우, answer+=1을 한다.
# 1st trial
# Failure
skill = "CBD"
skill_trees = ["BACDE", "CBADF", "AECB", "BDA"]
answer = 0
for t in skill_trees:
factor = ''
for f in t:
if f in skill:
factor+=f
if factor == '':
answer+=1
break
i = len(skill)
while i!=0:
if factor.startswith(skill[:i]):
answer+=1
break
else:
i-=1
처음 풀이할 때 제한사항의 하나인 스킬은 중복해 주어지지 않습니다
를 확인하지 않아 필터링 된 문자열의 길이에 대한 고려를 하지 않은 것이 문제였습니다. 이로 인해, while문을 사용하고 break를 통해 중단하고.. 그러다 보니 제대로 된 프로그래밍이 되지 않았습니다. 이후 제한사항을 고려하여 프로그래밍 하였으며, 성공적으로 통과했습니다!
# 2nd trial
# Input value
skill = "CBD" # Correct path string
skill_trees = ["BACDE", "CBADF", "AECB", "BDA"]
answer = 0 # Set initial value
for s in skill_trees:
strings = '' # Set local string
for i in range(len(s)): # Filtering if element of s in skill
if s[i] in skill:
strings += s[i]
if skill.startswith(strings): # strings's length must be same or shorter than skill
answer+=1 # if correct, answer +=1
answer
def solution(skill,skill_trees):
answer = 0
for s in skill_trees:
strings = ''
for i in range(len(s)):
if s[i] in skill:
strings += s[i]
if skill.startswith(strings):
answer+=1
return answer
# Code test
skill = "CBD"
skill_trees = ["BACDE", "CBADF", "AECB", "BDA"]
solution(skill,skill_trees)