문제:
https://school.programmers.co.kr/learn/courses/30/lessons/49993?language=cpp
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 :
처음 떠오른 방법은 일일이 비교 하는 것... 하지만 그러면 skill_trees의 각 글자를 skill의 모든 글자를 순회해야되기때문에 시간이 길어질 것이라고 생각했다.
그래서 생각한 방법이 map에 skill의 각 글자의 순서를 등록후, skill_trees의 각 글자가 이에 해당하는지 확인하는 것이었다.
check 변수를 선언해 skill 순서 대로 배웠는지 확인했다.
코드 :
#include <string>
#include <vector>
#include <map>
using namespace std;
map <char, int> m;
int solution(string skill, vector<string> skill_trees) {
int answer = 0;
for(int i = 0; i < skill.size(); i++){
m[skill[i]] = i + 1; // 스킬트리 순서를 기록
}
for(int i = 0; i < skill_trees.size(); i++){
int check = 1;
bool clear = true;
for(int j = 0; j < skill_trees[i].size(); j++){
if(m[skill_trees[i][j]]!=0 && m[skill_trees[i][j]]!=check) //스킬트리에 등록되었는데, 순서가 아닌경우
{
clear = false;
break;
}
if(m[skill_trees[i][j]]==check) //스킬을 배운경우
check++;
}
if(clear)
answer++;
}
return answer;
}
ps. 다른 사람의 풀이를 확인했는데 , 나와 다르게 푼 경우가 많더라...
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] LV2. 무인도 여행 (C++) (0) | 2024.02.15 |
---|---|
[프로그래머스] LV2. 오픈채팅방 (C++) (0) | 2024.02.15 |
[프로그래머스] LV3. 가장 먼 노드 (C++) (1) | 2024.02.15 |