[알고리즘C++]스킬트리

후이재·2020년 8월 31일
1

오늘의 문제

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

스킬트리

나의 풀이

#include <string>
#include <vector>
#include<iostream>

using namespace std;

int solution(string skill, vector<string> skill_trees) {
    int answer = skill_trees.size();

    for(int i=0;i<skill_trees.size();i++){
        string s = skill_trees[i];
        vector<int>idx;
        idx.push_back(0);

        for(int j=0; j< skill.size() ;j++){
            int f = s.find(skill.at(j));
            if(f >= 0){ // 찾음
                if(idx[j] <= f && idx[j] != -1){         
                    idx.push_back(f);
                }else{
                    answer--;
                    break;
                }
            }else{
                idx.push_back(-1); // 없음
            }
        }
    }
    return answer;
}

모범 답안

#include <string>
#include <vector>
#include<iostream>
using namespace std;

int solution(string skill, vector<string> skill_trees) {
    int answer = 0;
    for (int i = 0; i < skill_trees.size(); i++) {
        vector<char> compare;

        for (int k = 0; k < skill_trees[i].size(); k++) {
            for (int j = 0; j < skill.size(); j++) {
                if (skill[j] == skill_trees[i][k]) {
                    char tmp = skill[j];
                    compare.push_back(tmp);
                }
            }
        }
        bool check = true;;
        for (int c = 0; c < compare.size(); c++) {
            if (skill[c] != compare[c]) {
                check = false;
            }
        }
        if (check)answer++;
    }

    return answer;
}

배울 점

  • string 처리법을 또 하나 배웠다 find()를 사용하면 해당 문자열의 인덱스가 반환된다.
  • for (auto tree : skill_trees) {} 를 써서 string을 그때 그때 받아오지 않아도 될수도 있다.
profile
공부를 위한 벨로그

0개의 댓글