Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

피너클의 it공부방

백준 1268 임시 반장 정하기 (c++) : 피너클 본문

백준

백준 1268 임시 반장 정하기 (c++) : 피너클

피너클 2022. 5. 4. 13:26
728x90
반응형

https://www.acmicpc.net/problem/1268

 

1268번: 임시 반장 정하기

첫째 줄에는 반의 학생 수를 나타내는 정수가 주어진다. 학생 수는 3 이상 1000 이하이다. 둘째 줄부터는 1번 학생부터 차례대로 각 줄마다 1학년부터 5학년까지 몇 반에 속했었는지를 나타내는 5

www.acmicpc.net

간단한 구현문제다.

cin >> n;
for (int i = 1; i <= n; i++) {
	for (int j = 1; j <= 5; j++) {
		cin >> arr[i][j];
	}
}

n을 입력받고 n만큼의 학생의 데이터를 입력받는다.

int ban = 1001, stu = -1;
for (int i = 1; i <= n; i++) {
	int sol = solve(i);
	if (sol > stu) {
		stu = sol;
		ban = i;
	}
}
cout << ban << endl;

int ban은 반장의 번호고 stu는 같은 반을 한 학생의 수다.

n번 반복하며

만약 solve(i)를 통해 얻은 i가 지금까지 같은 반을 한 학생의 수가 stu보다 크다면

stu에 sol을 넣고 ban에 i를 넣는다.

반복문을 모두 돌린 후 ban을 출력한다.

int solve(int num) {
	int ans = 0;
	vector<bool> v;
	v.resize(n + 1);

int solve함수는 int num을 전달받는다.

int ans는 학생의 수를 나타낸다.

vector<bool>을 선언한후 resize를 통해 n+1만큼의 공간을 할당한다.

	for (int i = 1; i <= n; i++) {
		if (i == num) continue;
		for (int j = 1; j <= 5; j++) {
			if (arr[num][j] == arr[i][j]) {
				v[i] = true;
				break;
			}
		}
	}

n명의 학생이 있기 때문에 n만큼 반복하며 i와 num이 같다면 뒤의 반복문은 지나간다.

5개의 반이 있기 때문에 5번 반복하며 만약 num과 i가 한번이라도 같은 반이었던 적이 있다면

v[i] = true로 바꾸도 반복문을 빠져나온다.

	for (int i = 1; i <= n; i++)
		if (v[i]) ans++;
	return ans;
}

v안의 true만큼 ans++를 하고 리턴한다.

#include <iostream>
#include <algorithm>
#include <vector>
#include <string.h>

using namespace std;

int n;
int arr[1001][6];

int solve(int num) {
	int ans = 0;
	vector<bool> v;
	v.resize(n + 1);
	for (int i = 1; i <= n; i++) {
		if (i == num) continue;
		for (int j = 1; j <= 5; j++) {
			if (arr[num][j] == arr[i][j]) {
				v[i] = true;
				break;
			}
		}
	}
	for (int i = 1; i <= n; i++)
		if (v[i]) ans++;
	return ans;
}

int main()
{
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(0);
	
	cin >> n;
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= 5; j++) {
			cin >> arr[i][j];
		}
	}
	int ban = 1001, stu = -1;
	for (int i = 1; i <= n; i++) {
		int sol = solve(i);
		if (sol > stu) {
			stu = sol;
			ban = i;
		}
	}
	cout << ban << endl;

}

전체코드다.

728x90
반응형
Comments