Coding Test/codility

[codility] PermCheck c++

owls 2022. 4. 9. 21:32
728x90
  • 문제

permutation(순열) 인지 체크하는 문제이다.

 

 

  • 문제 해결

처음에 생각한 풀이는 75%가 나왔다.

1. A배열의 합 구하기

2. A배열의 크기로 A.size() 일 때 순열의 합 구하기

3. 1,2 비교하기

#include <string>
#include <algorithm>
#include <vector>
#include <iostream>
#include <numeric>

int solution3(std::vector<int> &A) {

	int len = A.size()+1;
	long sumP = len * (len + 1) / 2;
	long sumA = std::accumulate(A.begin(), A.end(), 0);

	if (sumP != sumA)
		return 0;

	return 1;
}

#define PermCheck  

#ifdef PermCheck  

int main() {

	std::vector<int> nVec = {4,1,3,2};
	std::cout << solution3(nVec);

	return 0;
}
#endif

다른 방법을 생각했다.

내가 어렵게 생각한거 같다.

오히려 쉽게 반복문으로 하니 100%가 나왔다...! 

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

#include <iostream>

int solution(std::vector<int> &A) {

	sort(A.begin(), A.end());

	for (int i = 1; i <= A.size(); i++) {
		if (A.at(i - 1) != i)
			return 0;
	}

	return 1;
}

#define PermCheck  

#ifdef PermCheck  

int main() {

	std::vector<int> nVec = {4,1,3,2};
	std::cout << solution4(nVec);

	return 0;
}
#endif

728x90