Level 2. 스킬트리

Pear_Mh·2021년 7월 23일
0

Programmers-Level 2.

목록 보기
35/40

스킬트리

코딩테스트 연습 > 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)
profile
Beyond the new era.

0개의 댓글