bdfgdfg

[레벨 2] 스킬트리 본문

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

[레벨 2] 스킬트리

marmelo12 2021. 11. 28. 15:19
반응형
#include <string>
#include <vector>
#include <queue>
using namespace std;

int solution(string skill, vector<string> skill_trees) {
    int answer = 0;
    int skillLen = skill.size();
    int userSkillLen = skill_trees.size();
    int saveArr[26] = {0,};
    vector<char> userSkill;
    bool flag;
    userSkill.reserve(skillLen);
    
    for(int saveSkill = 0; saveSkill < skillLen; ++saveSkill)
        saveArr[skill[saveSkill] - 'A'] = 1;
    
    for(int find = 0; find < userSkillLen; ++find)
    {
        flag = true;
        userSkill.resize(0);
        int userSkillElement = skill_trees[find].size();
        for(int cor = 0; cor < userSkillElement; ++cor)
        {
            char corElement = skill_trees[find][cor];
            if(saveArr[corElement - 'A'] == 1)
                userSkill.push_back(corElement);
        }
        
        for(int comp = 0; comp < userSkill.size(); ++comp)
        {
            if(skill[comp] != userSkill[comp])
                flag = false;
        }
        if(flag)
            ++answer;
    }
    
    return answer;
}

처음에 문제를 잘못읽어 스킬의 요소들이 모두 유저스킬목록에 담겨있는줄 알고 큐를 이용해 풀었다.

하지만 유저스킬의 목록중 스킬트리의 모든 스킬이 나올 필요는 없고 그 순서만 중요한 것.

 

그렇기에 스킬의 순서가 문제를 푸는데 중요한 요소이므로 따로 알파벳 길이의 배열을 만들어 스킬트리의 스킬값들을 저장하고, 유저 스킬트리의 목록을 읽으면서 스킬트리의 스킬이 존재한다면 우선 userSkill 벡터에 집어넣은 후

그 순서가 맞는지 다시 스킬트리의 스킬순서와 비교.

반응형

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

[레벨 2] 짝지어 제거하기  (0) 2021.12.08
[레벨 2] 가장 큰 정사각형 찾기  (0) 2021.11.16
[레벨1] 실패율  (0) 2021.11.12
[레벨 1] 다트찾기  (0) 2021.11.02
[레벨 1 ] 최소직사각형 만들기  (0) 2021.11.01
Comments