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

using namespace std;

int solution(string skill, vector<string> skill_trees) {
    int answer = 0;
    string tmp= "";
    //sill_trees 내의 string 내에 skill string과 동일한 skill만을 저장하기 위한 변수
    for(int i=0;i<skill_trees.size();i++)
    {
        for(int j=0;j<skill_trees[i].size();j++)
        {
            for(int k=0;k<skill.size();k++)
            {
                if(skill_trees[i].at(j)==skill.at(k))
                    tmp.push_back(skill_trees[i].at(j));
                //선행 스킬 순서에 포함된 스킬만 tmp에 저장한다.
            }    
        } 
        if(skill.find(tmp)==0) 
            //find를 실행하였을 때 선행 스킬순서의 첫번째 인덱스를 반환할 때만 
            //사용가능한 유저스킬트리
             answer++;   
        
        tmp=""; 
        //다음 인덱스에서의 확인을 위해 tmp  초기화
     }
    return answer;
}

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<int> heights) {
    vector<int> answer;
    int j=heights.size()-2;
    //heights 벡터의 가장 오른쪽 부터 기록을 진행
    for(int i=j+1;i>=0;i--)
    {   
        //송신탑의 높이가 더 높은 경우 신호가 닿음
        //answer에 push_back하여 신호가 닿은 송신탑 위치 저장
        if(heights[i]<heights[j]){
            answer.push_back(j+1);
            j=i-1;
        }
        //현재 송신탑의 위치에서 끝까지 신호가 닿지 않거나
        //더이상 송신탑이 존재하지 않았을 때는 0 을 push_back
        else if(j==0||i==0)
        {
            answer.push_back(0);
            j=i-1;
        }
        //송신탑이 닿지 않은 경우 현재 송신탑에 대한 탐색
        //j++를 통해 그 다음 송신탑과 통신 확인
        else
        {
            j--;
            i++;
        }
    }
    //answer에 반대의 순서로 push_back해주었기 때문에 reverse
    reverse(answer.begin(),answer.end());
    return answer;
}

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> prices) {
	vector<int> answer;
	int i = 0, j = 1;
	for (; i < prices.size(); i++)
	{
        //현재 price에 대하여 벡터 끝까지 가격 하락이 이루어지지 않은 경우
		if (j == prices.size())
		{
			answer.push_back( (j-1)- i);
			j = i + 1;
		}
        //현재 price에 대하여 [j]인덱스에서 가격하락이 이루어진 경우
		else if (prices[i] > prices[j])
		{
			answer.push_back(j - i);
			j = i + 1;
		}
        //가격 하락이 이루어지지 않은 경우 현재 i에 대하여 다음 j인덱스로
        //반복문을 실행
		else
		{
			j++;
			i--;
		}
	}
	return answer;
}

#include <string>
#include <vector>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
	vector<int> answer;
    //먼저 배포되어야 하는 순서대로 배포일 저장
	vector<int> result;
    //결과 저장

    //각 작업 별 배포 가능 일 계산 후 answer vector에 push_back
	for (int i = 0; i < progresses.size(); i++)
	{
		int tmp = ((100 - progresses.at(i)) / speeds.at(i));
		answer.push_back(tmp);
	}
    answer.push_back(100);
    //아래 for문의 조건에서 마지막 push_back을 해주기 위한 dummy값 
	
    int rank=answer.at(0);
    //rank를 통해 rank이전에 몇가지 작업이 있었는지 check
	int cnt=0;
    //cnt를 통해 이전에 어디까지 count했는지 저장

	for (int i = 0; i < answer.size(); i++)
	{
        //마지막 index라면 결과를 무조건 push_back
		if (i == (answer.size() - 1))
		{
			result.push_back(i - cnt);
		}
        //현재 index의 값이 rank보다 크다면 이전까지 개수를
        //count 하여 result에 push_back
		else if (answer.at(i) > rank)
		{
			rank = answer.at(i);
			result.push_back(i - cnt);
			cnt = i;
		}
	}
	return result;
}

+ Recent posts