방금 정확한 해법을 알아내기는 했지만, 이것도 정답은 정답이니 일단 기록해둔다.

초콜릿 박스에서 몇개의 초콜릿을 먹을 수 있는지 확인하는 문제이다.

10, 4가 주어지면, 초콜릿 갯수는 10개이고, 이 배열에서 0부터 시작하여 4씩 증가하면서 초콜릿을 먹는다.

그리고 만약 10보다 커지면 다시 modulo 연산을 해서 2부터 시작하여 다시 4씩 증가하며 먹는 것이다.

이는 빈 초콜릿칸이 나올때 까지 계속해서 반복한다.



#include <vector>

int solution(int N, int M)
{
	int nRet = 0;

	if (N > 0 && M > 0)
	{
		vector<int> kChoco(N, 1);

		int nSize = N - 1;
		int nIdx = 0;

		while (kChoco[nIdx] != 0)
		{
			kChoco[nIdx] = 0;
			++nRet;
			nIdx += M;
			if (nIdx >= nSize)
				nIdx %= N;
		}
	}

	return nRet;
}



정말 문제의 설명 그대로 구현했는데, 이러면 Time Complexity가 O(N + M)이 된다.

(여기서 N은 처음 루프, M은 그 다음 modulo 연산 관련으로 보인다.)

정확도 100%, 성능 25%

저작자 표시 비영리 변경 금지
신고

'Programming > C,C++' 카테고리의 다른 글

[Codility] ChocolatesByNumbers  (0) 2017.12.06
[Codility] ChocolatesByNumbers  (0) 2017.12.06
[Codility] CountFactors  (0) 2017.12.06
[Codility] MinPerimeterRectangle  (0) 2017.12.06
[Codility] MaxProfit  (0) 2017.12.06
[Codility] Dominator  (0) 2017.12.05

+ Recent posts