코딩 테스트/프로그래머스

Lv2. 스킬트리

  • -
728x90
반응형

문제 보기 :  스킬트리

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 


문제

  • 정답률 : 59%


작성 코드 및 풀이

def solution(skill, skill_trees):
    answer = 0
    s = list(skill[:i] for i in range(1,len(skill)+1)) 
    sk = list(skill)

    for st in skill_trees:
        sa = '';j=0
        stt = list(st)
        for i in stt:
            if i in sk:
                if i != skill[j]:
                    break
                else:
                    sa+=i
                    j+=1
        if sa in s:
            answer += 1
    
    return answer

처음엔 이렇게 작성했는데 완전 다 틀림.. 처음 풀이한 방법은 이렇다.

"CBD"일 경우 C, CB, CBD만 가능하니까 이걸 s로 두고, sk에는 C, B, D를 넣었다.
["BACDE", "CBADF", "AECB", "BDA"]는 for문으로 돌면서 list로 변경시킨 다음,  
한 알파벳이 sk 내에 있을 때 그 값을 sa라는 문자열에 더하는 것이다.

for문을 전부 돈 문자열이 s에 있으면 answer+=1을 취해 답을 구하는데 이렇게 풀이하니 40점대밖에 안나옴... 흑..

그래서 예외처리가 있을 것이라 생각했고 열심히 머리를 굴려봤다.

그리고 얻어낸 답은 아래와 같다.


def solution(skill, skill_trees):
    answer = 0
    s = list(skill[:i] for i in range(1,len(skill)+1)) 
    sk = list(skill)

    for st in skill_trees:
        sa = '';j=0
        stt = list(st)
        for i in stt:
            if i in sk:
                sa+=i
        if sa in s:
            answer += 1
        elif sa == '':
            answer += 1
    
    return answer

포인트는 sa가 공란일 때였다.

CBD가 없을 때, 즉 스킬트리가 ANE 이렇게 이루어져있을 때는 CBD를 고려하지 않아도 되기 때문에 sa는 공란이 될 수 밖에 없고,
이때도 answer += 1을 해줘야하는 것이었다!

320x100
728x90

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

Lv0. 주사위 게임 3  (3) 2024.08.28
Lv2. 방문 길이  (2) 2024.08.28
Lv1. [1차] 다트 게임  (0) 2024.08.24
Lv2. 롤케이크 자르기  (0) 2024.08.23
Lv1. 소수 찾기  (0) 2024.08.08
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.