[프로그래머스/코딩테스트] 스킬트리 문제풀이

2021. 3. 14. 18:23·Minding's Programming/프로그래머스 코딩테스트
728x90
반응형

programmers.co.kr/learn/courses/30/lessons/49993

 

코딩테스트 연습 - 스킬트리

 

programmers.co.kr

문제 설명

선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.

예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다.

위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다.

선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.

 

제한 조건

  • 스킬은 알파벳 대문자로 표기하며, 모든 문자열은 알파벳 대문자로만 이루어져 있습니다.
  • 스킬 순서와 스킬트리는 문자열로 표기합니다.
    • 예를 들어, C → B → D 라면 "CBD"로 표기합니다
  • 선행 스킬 순서 skill의 길이는 1 이상 26 이하이며, 스킬은 중복해 주어지지 않습니다.
  • skill_trees는 길이 1 이상 20 이하인 배열입니다.
  • skill_trees의 원소는 스킬을 나타내는 문자열입니다.
    • skill_trees의 원소는 길이가 2 이상 26 이하인 문자열이며, 스킬이 중복해 주어지지 않습니다.

입출력 예

skill skill_trees return
"CBD" ["BACDE", "CBADF", "AECB", "BDA"] 2

입출력 예 설명

  • "BACDE": B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트립니다.
  • "CBADF": 가능한 스킬트리입니다.
  • "AECB": 가능한 스킬트리입니다.
  • "BDA": B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트리입니다

 

 

문제 풀이

def solution(skill, skill_trees):
    answer = 0

    for tree in skill_trees:
        skill_list = list(skill) # 스킬 학습 순서를 리스트에 저장
        count = 0 # tree가 끝까지 돌아갔는지 확인을 위한 변수
        for j in tree:
            if j in skill and j != skill_list.pop(0):
                    break # j가 학습순서에 속하고, 지금의 스킬리스트 첫번째 값과 같지 않다면 break
            count += 1 # 위 if문이 한번 반복할때마다 count + 1
            if count == len(tree): # count가 tree의 길이만큼되면, answer + 1
                answer += 1
    
    return answer

스킬을 배운거는 리스트에서 지워가며 비교해본다는 생각으로 pop()함수를 이용했다.

 

for ~ if 등을 통해 스킬트리가 학습 순서에 올바른지 하나씩 확인해보는 방식으로 진행했으며,

 

count라는 변수를 통해 각 스킬트리가 정상적으로 for문을 통과하면 answer에 1을 더하는 식으로 코딩했다.

 

 

 

다른 사람의 문제풀이

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

다른 사람의 문제풀이를 보니, 지금까지 사용해본적 없던 for ~ else문의 개념을 알게되었다.

 

for문이 정상적으로 돌아간다면 (if의 조건에 걸리지 않아 break가 발동되지 않는다면)

 

그 때 else문을 실행시킬 수 있는 문법이다.

 

for ~ else문을 활용한다면, 더욱 간단명료한 코드를 만들 수 있을 것 같다.

728x90

'Minding's Programming > 프로그래머스 코딩테스트' 카테고리의 다른 글

[프로그래머스/코딩테스트/Python] 오픈채팅방 문제풀이  (0) 2021.06.09
[프로그래머스 / 코딩테스트/ Python] 메뉴 리뉴얼 문제풀이  (0) 2021.04.15
[프로그래머스/코딩테스트/Python] 삼각 달팽이 문제풀이  (0) 2021.04.01
[프로그래머스/코딩테스트/Python] 문자열 압축 문제풀이  (0) 2021.03.29
[프로그래머스/코딩테스트/Python] 멀쩡한 사각형 문제풀이  (0) 2021.03.22
'Minding's Programming/프로그래머스 코딩테스트' 카테고리의 다른 글
  • [프로그래머스 / 코딩테스트/ Python] 메뉴 리뉴얼 문제풀이
  • [프로그래머스/코딩테스트/Python] 삼각 달팽이 문제풀이
  • [프로그래머스/코딩테스트/Python] 문자열 압축 문제풀이
  • [프로그래머스/코딩테스트/Python] 멀쩡한 사각형 문제풀이
Minding
Minding
  • Minding
    Today's Minding
    Minding
  • 전체
    오늘
    어제
    • 울고넘는 딥러닝 (278)
      • Minding's Baseball (57)
        • MLB Statcast (29)
        • 머신러닝으로 홈런왕 예측하기 (3)
        • 야구칼럼 (12)
        • 야구 규칙, 용어 (1)
        • 2022-23 질롱 코리아 (8)
        • 류현진 등판경기 (4)
      • Minding's Programming (185)
        • 프로그래머스 코딩테스트 (21)
        • Knowledge (44)
        • Numpy & Pandas (6)
        • Excel (3)
        • Git (1)
        • Pygame (11)
        • CV (3)
        • Tensorflow tutorial (4)
        • Kaggle and Dacon (4)
        • 에러 코드 (8)
        • FastAPI (8)
        • Airflow (29)
        • Crawling (6)
        • Django (14)
        • AWS (18)
        • Spark (5)
      • Minding's Reading (30)
        • 머신러닝 딥러닝에 필요한 기초 수학 with 파이.. (2)
        • 칼만필터는 어렵지 않아 (11)
        • 밑바닥부터 시작하는 딥러닝 (6)
        • 메이저리그 야구 통계학 2e (8)
        • 논문읽기 (2)
        • 빅데이터를 지탱하는 기술 (1)
      • Minding's Life (5)
        • 주식 (4)
        • 각종 소식 (1)
  • 블로그 메뉴

    • 홈
    • Baseball
    • Programming
    • Reading
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    pygame
    코딩테스트
    칼만필터는어렵지않아python
    머신러닝
    질롱코리아
    메이저리그
    칼만필터는어렵지않아
    야구
    mlb stats api
    Python
    KBO
    게임개발
    넘파이
    FastAPI
    데이터분석
    django
    django python
    파이썬게임개발
    Airflow
    AWS
    칼만필터
    에어플로우
    파이썬
    MLB
    칼만필터는어렵지않아파이썬
    데이터 엔지니어
    KalmanFilter
    파이게임
    프로그래머스
    딥러닝
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Minding
[프로그래머스/코딩테스트] 스킬트리 문제풀이
상단으로

티스토리툴바