03.스킬트리
- 
문제이해 
  
 문제 이름으로 봐서는 트리구조와 관련된 문제같지만 아니였다. 문자열(스킬트리)들 중에서 원하는 조건(문자 순서)를 반드시 만족하는 문자열의 개수를 구하는 문제이다.
- 
pseudo code 문자열에 하나씩 접근한다. 
 접근한 문자열에서 문자를 하나씩 조건과 대조를 한다.
 모든 조건을 만족했을 경우 count의 수를 증가시켜준다.
- 
문제점 
 처음 문제를 봤을 때 3중 loop를 통해서 문제를 해결하면 되겠다고 생각했다. 그러나 조건에서 문자열의 앞뒤 순서와 꼭 모든 문자열이 있지 않아도 된다는 조건을 적용시키는데 막혔다. 나중에 보니 반복문을 통해서도 문제 해결은 가능했다. 그러나 효율적이고 새로운 방식을 통해 문제를 풀어보고자 map을 공부하고 적용시켜보기로 했다.
- 
map map헤더파일에 존재 
 선언은 map<'type1','type2'> 변수명
 type1: key, type2: value로 키와 값으로 구성
 Key의 중복을 허용하지 않는 것이 특징!(중복을 허용하는 multi_map이 존재)
 또한, key값으로 자동으로 정렬해준다. (default는 오름차순)
 내림차순은 map<int, string, greater< int >>
 문자열이 key값일 경우 첫글자를 기준으로 정렬해준다.- 저장 형태
  
 
- 저장 형태
- 
map 적용 코드 
#include <map>
#include <iostream>
#include <string>
using namespace std;
int main() {
	map<int, string> m1;
	map<char, int> m2;
	map<string, int>m3;
    
	//m1 생성법
	//map의 속성
	//키가 되는 값의 중복을 허용하지 않는다. 중복을 허용하는 map을 만들려면 multi_map이라고 따로 있다.
	//map.insert(pait<type,type>)를 통해 입력한다.
	//만약 중복되는 키값의 입력이 있다면 먼저 있던 값이 유지 된다.
	//또한 키값에 자동 정렬된다.
	m1.insert(pair<int, string>(40, "me"));
	m1.insert(pair<int, string>(35, "show"));
	m1.insert(pair<int, string>(10, "Dok2"));
	m1.insert(pair<int, string>(20, "lee"));
	m1.insert(pair<int, string>(10, "kim"));
	
    	//반복문을 통해 접근하여 값을 수정할 수 있다.
	for (int i = 0; i < 3; i++) {
		m1[i] = "auto";
	}
	//접근 방법
	//iterator를 통해 접근하기
	map<int, string> ::iterator iter;
	for (iter = m1.begin(); iter != m1.end(); iter++) {
		cout << "[" << iter->first << "," << iter->second << "]" << "  ";
	}
	cout << endl;
    
	//문자열이 키값일 경우 첫글자를 기준으로 정렬한다.
	m3.insert(pair<string, int>("lee", 1));
	m3.insert(pair<string, int>("kim", 2));
	m3.insert(pair<string, int>("park", 3));
	m3.insert(pair<string, int>("hwang", 4));
	map<string, int> ::iterator iter1;
	for (iter1 = m3.begin(); iter1 != m3.end(); iter1++) {
		cout << "[" << iter1->first << "," << iter1->second << "]" << endl;
	}
	return 0;
}
> 참고:https://hwan-shell.tistory.com/149
- 문제 풀이#include 
#include 
#include 
using namespace std;
int solution(string skill, vector skill_trees) {
int answer = 0;
map<char,int>skillTree;
//맵생성
for(int i = 0 ; i<skill.size();i++){
    skillTree[skill[i]] = i+1;
}
for(int i = 0 ; i<skill_trees.size();i++){
    
    int count = 1;
    bool check = true;
    
    for(int j = 0 ; j<skill_trees[i].size();j++){
     if(skillTree[skill_trees[i][j]]>count){
        check = false;
         break;
     }
        else if(skillTree[skill_trees[i][j]]==count){
            count++;
        }
    }
  if(check)
      answer++;
}
return answer;}
- 정리
  map에 대해서 공부하고 사용해보았다. 꽤나 고민했던 부분이 수월하게 해결할 수 있었다.
  특히나 값을 만족하는 인덱스가 필요할 때 잘 활용할 수 있는 것 같다. 
  또한 iterator를 통해 반복문으로 원소에 쉽게 접근할 수 있으니 잘 사용하자!! Author And Source
이 문제에 관하여(03.스킬트리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@honeyoung_0117/03.스킬트리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)