[HackerRank/C++] Cut the sticks

2023. 2. 7. 07:50코딩테스트 해커랭크/Algorithms -Easy

막대의 길이값을 가지는 arr를 인자로 받는다

 

arr중 가장 작은 값으로 모든 막대를 나누고, 0이 아닌 막대의 갯수를 배열에 저장하며 모든 막대의 길이가 0일때까지 저장한 vector를 return 한다

vector<int> cutTheSticks(vector<int> arr)
{
    vector<int> result;
    result.push_back(arr.size());
    
    while (true)
    {
        int min = INT_MAX;
        int size = arr.size();
        
        for (int i = 0; i < arr.size(); ++i)
        {
            if (min > arr[i] && arr[i] > 0)
                min = arr[i];
        }
        
        for (int i = 0; i < arr.size(); ++i)
        {
            if (arr[i] != 0)
                arr[i] -= min;
            if (arr[i] == 0)
                --size;
        }
        
        if (0 == size)
            break;
            
        result.push_back(size);
    }
    
    return result;
}

반환할 result vector를 만들고 현재 arr.size()의 값을 넣는다

 

반복을 돌며 가장 작은 값을 찾아 min에 저장하고, arr의 0이 아닌 모든 값에서 mix만큼 빼주며 값이 0일 경우 arr.size() 값에서 1 감소시킨다

 

만약 size가 0이 되면 break로 빠져나와 값을 return하고, 0이 아니면 현재 size를 result에 push_back 하고 0이 될때까지 반복한다