[프로그래머스] 스킬트리Lv.2

나의 풀이

def solution(skill, skill_trees):
    answer = 0
    for skill_tree in skill_trees:
        isOrdered = True
        for i in range(1, len(skill)):
            pre_idx = str(skill_tree).find(skill[i - 1])
            now_idx = str(skill_tree).find(skill[i])
            if now_idx != -1 and pre_idx == -1:
                isOrdered = False
                break
            if now_idx != -1 and pre_idx != -1:
                if now_idx <= pre_idx:
                    isOrdered = False
                    break
        if isOrdered:
            answer += 1

    return answer
  • 우선 조건을 두 가지로 나누었다. 예를 들어 skill 변수로 "CBD" 가 들어온다 가정한다.
    인덱스를 1부터 시작하여 스킬트리에서 현재 인덱스의 스킬인 'B'는 존재하지만 전 인덱스의 스킬 'C'가 없는 경우 실패. 그리고 현재 인덱스의 스킬 'B'도 존재하고 전 인덱스 스킬 'C'도 존재하지만 'C'의 인덱스 번호가 더 높을 경우 실패. 그 외는 성공. 이런식으로 나눠서 코드를 짜보았다.
  • boolean변수 isOrdered를 True로 설정하고 skill_tree를 for문으로 돌린다.
  • 인덱스 1부터 skill의 문자 길이만큼 반복을 돌린다.
  • 전 스킬의 인덱스, 현재 스킬의 인덱스를 담을 변수 pre_idx, now_idx를 두었다.
  • 만약 현재 스킬은 존재하지만, 전의 스킬이 없다면, isOrdered 변수를 False로 바꾸고 반복을 종료한다.
  • 만약 현재 스킬과 전 스킬 모두 존재하지만 현재 스킬의 인덱스가 전 스킬의 인덱스보다 낮거나 같다면, 마찬가지로 isOrdered를 False로 바꾸고 반복을 종료한다.
  • 반복문을 빠져나와 isOrdered가 True라면 answer += 1을 해준다.

0개의 댓글