https://school.programmers.co.kr/learn/courses/30/lessons/49993
이 문제는 map을 활용해서 해결할 수 있다.
문제에서 skill 문자열에 순서가 있는 스킬이 주어진다.
따라서 map에 순서가 있는 문자를 저장해둔다.
스킬트리 배열을 순회하고 현재 배울 스킬이 순서가 있는 스킬이고, 순서가 맞다면
배울 순서 인덱스를 증가시켜 다음 스킬이 배울 수 있는 스킬인지 결정한다.
만약 순서가 없는 스킬일이거나 순서가 맞지 않는 경우
순서가 맞지 않는지 확인하기 위해 map에 문자를 검색한다.
순서가 맞지 않다면 반복을 멈춘다.
#include <string>
#include <vector>
#include <map>
#include <iostream>
using namespace std;
int solution(string skill, vector<string> skill_trees) {
int answer = 0;
map<char, bool> skill_map;
for(int i = 0;i<skill.length();i++)
skill_map[skill[i]] = true;
for(int i = 0;i<skill_trees.size();i++){
string skill_tree = skill_trees[i];
int skillIdx = 0;
bool isClear = true;
for(int j = 0;j<skill_tree.length();j++){
if(skill[skillIdx] == skill_tree[j]){
skillIdx++;
}
else{
if(skill_map[skill_tree[j]]){
isClear = false;
break;
}
}
}
if(isClear)
answer++;
}
return answer;
}
'Programmers Review' 카테고리의 다른 글
[Lv 2] [3차] n진수 게임 (0) | 2024.08.10 |
---|---|
[Lv 2] 할인 행사 (0) | 2024.08.05 |
[Lv 2] 튜플 (0) | 2024.08.02 |
[Lv 2] 전화번호 목록 (0) | 2024.08.02 |
[Lv 2] [1차] 뉴스클러스팅 (0) | 2024.08.02 |