c++ 배열에서 같은 숫자의 개수를 세는 방법들

sungyeon_park·2024년 1월 27일
0

단계별로 풀어보기에서 순서대로 백준 문제를 풀고있던중 백준 문제를 풀다 보면 같은 숫자의 개수를 세는 문제가 많이 나왔다.
그래서 한번 어떤 것들이 있는지 정리해보고 싶어졌다.

  1. cnt배열을 만들어서 개수를 세기
 #include <iostream>
using namespace std;

int main() {
	int n[10];
	int cnt[10] = {0};

	for (int i = 0; i < 10; i++) {
		cin >> n[i];
		cnt[n[i]]++;
	
    		if (cnt[n[i]] > 1) {
			cout << n[i] << "가 여러개 있습니다." << endl;
		}
}
	return 0;
}
  1. count++를 이용하기
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
	int n[10];
	for (int i = 0; i < 10; i++) {
		cin >> n[i];
	}

	sort(n, n + 10);

	int count = 1;
	for (int i = 1; i < 10; i++) {
		if (n[i] == n[i - 1]) {
			count++;
		}
		else {
			cout << n[i - 1] << "가 " << count << "개 있습니다." << endl;
			count = 1;
		}
	}
	cout << n[9] << "가 " << count << "개 있습니다." << endl;

	return 0;
}
  1. STL의 find함수 + count_if이용하기
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
	int n[10];
	for (int i = 0; i < 10; i++) {
		cin >> n[i];
	}

	vector<int> checked;

	for (int i = 0; i < 10; i++) {
		if (find(checked.begin(), checked.end(), n[i]) != checked.end()) {
			continue;
		}
		checked.push_back(n[i]);

		int count = count_if(n, n + 10, [n, i](int x) { return x == n[i]; });
		cout << n[i] << "가 " << count << "개 있습니다." << endl;
	}

	return 0;
}
  1. STL 함수의 find이용하기

n[i]를 입력받을 때 중복되는 요소를 찾기 때문에 중간에 sort하는 코드보다 코드가 더 효율적이다.

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int n[10];
    vector<int> num;
    
    for (int i = 0; i < 10; i++) {
        cin >> n[i];
        if (find(num.begin(), num.end(), n[i]) == num.end()) {
            num.push_back(n[i]);
        }
    }
    
    for (int i = 0; i < num.size(); i++) {
        int count = 0;
        for (int j = 0; j < 10; j++) {
            if (num[i] == n[j]) {
                count++;
            }
        }
        cout << num[i] << "가 " << count << "개 있습니다." << endl;
    }
    
    return 0;
}
profile
박성연

0개의 댓글