https://programmers.co.kr/learn/courses/30/lessons/49993
#include <string>
#include <vector>
using namespace std;
// 각 문자열의 스킬 순서가 가능한 스킬트리인지 검사
bool possible(int input_order[], string &tree)
{
int t_order = 1;
for (int i = 0; i < tree.size(); ++i)
{
// 선행스킬 목록에 주어진 스킬만 검사
if (input_order[tree[i] - 'A'])
{
// 선행스킬과 순서가 다르면 false 리턴
if (input_order[tree[i] - 'A'] != t_order)
{
return false;
}
// 같으면 인덱스 증가
++t_order;
}
}
return true;
}
int solution(string skill, vector<string> skill_trees) {
// 선행스킬로 주어진 스킬트리 순서 입력
const int MAX = 26;
int input_order[MAX] = { 0, };
int order = 1;
for (int i = 0; i < skill.size(); ++i)
{
input_order[skill[i] - 'A'] = order++;
}
// 각 스킬 트리 검사
int answer = 0;
for (int i = 0; i < skill_trees.size(); ++i)
{
if (possible(input_order, skill_trees[i]))
{
++answer;
}
}
return answer;
}
입력이 최대 26까지 (알파벳 길이) 이므로,
크기가 26인 int배열을 만들어서 들어온 순서대로 값을 매긴다.
예를 들어 C → B → D 로 들어왔다면
arr[B] = 2, arr[C] = 1, arr[D] = 3 이런식으로.
어차피 앞에서부터 비교해 나갈거니까,
주어진 스킬트리와 순서가 같지 않으면 바로 FALSE!
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스]2020 KAKAO BLIND RECRUITMENT : 괄호 변환 (level 2)(c++) (0) | 2020.05.13 |
---|---|
[프로그래머스]2017 카카오코드 예선 : 카카오프렌즈 컬러링북 (level 2)(c++) (0) | 2020.05.11 |
[프로그래머스]해시 : 전화번호 목록 (level 2) (c++) (0) | 2020.05.08 |
[프로그래머스]탐욕법(Greedy) : 구명보트(level 2) (c++) (0) | 2020.05.08 |
[프로그래머스]탐욕법(Greedy) : 조이스틱 (level 2) (c++) (0) | 2020.05.07 |
댓글