• Codility lesson4_2 - MaxCounters

    2021. 8. 21.

    by. 내이름은 킹햄찌

     

    요약

    배열의 크기를 나타내는  정수 N과 배열의 원소를 바꿀 벡터 A를 입력으로 주어짐

    0으로 초기화 되어 있는 N크기의 벡터를 벡터 A에 있는 숫자번째를 1씩 증가시키고 N+1일때는 N크기의 벡터중 가장 큰 수로 모두 초기화를 시켜야 함

     

    아이디어 

    1. N크기의 벡터를 만든 후 A벡터를 돌며 문제의 조건대로 원소들을 증가시킨다.

    2. 이때 N+1을 만났을때 바로 모든 원소들을 초기화 시키면 시간복잡도가 O(N*M)이 될 수 있음

    3. 모든 원소를 초기화시키지 않고 개별 원소들을 방문마다 초기화를 시키고 마지막에 초기화 되지 않은 원소들만 다시 초기화 하면됨

     

    코드

    vector<int> solution(int N, vector<int> &A) {
    	// write your code in C++14 (g++ 6.2.0)
    	vector<int>v(N, 0);
    	int increase = 0;
    	int max = 0;
    	for (auto it : A)
    	{
    		if (it == N + 1)
    			increase = max;
    		else
    		{
    			if (v[it - 1] < increase)
    				v[it - 1] = increase + 1;
    			else
    				v[it - 1]++;
    
    			if (v[it - 1] > max)
    				max = v[it - 1];
    		}
    
    	}
    	for (int i = 0; i <v.size(); i ++)
    	{
    		if (v[i] < increase)
    			v[i] = increase;
    	}
    	return v;
    }

    결과는

    사실 첫 시도에는 직관적으로 풀었다가 시간 초과를 받았었습니다 ㅠㅠ

    문제의 난이도가 너무 쉬워서 시간복잡도에 관해 생각도 해봤어야하는데 아쉬움이 조금 남는 문제 같습니다.

    '알고리즘 > Codility' 카테고리의 다른 글

    Codility lesson4_4 - PermCheck  (0) 2021.08.21
    Codility lesson4_3 - MissingInteger  (0) 2021.08.21
    Codility lesson4_1 - FrogRiverOne  (0) 2021.08.20
    Codility lesson3_3 - TapeEquilibrium  (0) 2021.08.15
    Codility lesson3_2 - PermMissingElem  (0) 2021.08.15

    댓글