Make Unreal REAL.
article thumbnail
Level 2. 스킬트리

 

 

선행 스킬 정보를 앞에서부터 순서대로 1, 2, 3, ...으로 map에 배정한다.

  • unordered_map은 마지막 원소를 가져오는 방법이 없어 map을 사용했다.

 

선행 스킬 중 마지막 스킬을 last에 저장한다.

 

현재 스킬이 선행 스킬이고, 마지막 선행 스킬이 현재 스킬의 직전 스킬이면 마지막 선행 스킬을 갱신한다.

  • 현재 선행 스킬이 선행 스킬 정보의 마지막 스킬이면, 뒤는 더 확인할 필요가 없으므로 종료한다.

현재 스킬이 선행 스킬인데, 마지막 선행 스킬이 현재 스킬의 직전 스킬이면 아니면 스킬 트리를 어긴 것이다.

 

#include <iostream>
#include <vector>
#include <map>
#include <numeric>

using namespace std;

int solution(string skill, vector<string> skill_trees)
{
    int answer = 0;
    map<char, int> mp;

    for (int i = 0; i < skill.length(); ++i)
        mp[skill[i]] = i + 1;

    for (string& sk_tree : skill_trees)
    {
        char last = '\0';
        bool bSuccess = true;

        for (char c : sk_tree)
        {
            if (mp[c] - 1 == mp[last])
            {
                if (c == mp.rbegin()->first)
                    break;
                else
                    last = c;
            }
            else if (mp[c])
            {
                bSuccess = false;
                break;
            }
        }

        if (bSuccess)
            ++answer;
    }

    return answer;
}

'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글

Level 2. 기능개발  (0) 2023.04.08
Level 2. 타겟 넘버  (0) 2023.04.07
Level 2. 추억 점수  (0) 2023.04.05
Level 2. 최솟값 만들기  (0) 2023.04.04
Level 2. 큰 수 만들기  (0) 2023.04.03
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그