Computer Science/Algorithm Problem

백준] 2966 - 찍기(COCI 2008/2009)

TwinParadox 2018. 5. 29. 19:10
728x90

시간 제한 : 1초

메모리 제한 : 128MB




입력

첫째 줄에 필기시험의 문제의 수 N이 주어진다. (1 ≤ N ≤ 100)

둘째 줄에는 시험의 정답이 주어진다.




출력

첫째 줄에 가장 많은 문제를 맞춘 사람이몇 문제를 맞추었는지 출력한다.

다음 줄에는 가장 많은 문제를 맞춘 사람의 아이디를 한 줄에 하나씩 출력한다. 상근이의 아이디는 Adrian, 창영이의 아이디는 Bruno, 현진이의 아이디는 Goran이다. 아이디 여러 개를 출력하는 경우에는 상근이, 창영이, 현진이 순서로 출력한다.




소스코드

#include <iostream>
#include <string>
using namespace std;
int main(void)
{
	int n, max = -1, len, ans[3] = { 0, }, meta[3][6] = { {0,1,2},{1,0,1,2},{2,2,0,0,1,1,} };
	string str;
	cin >> n;
	cin >> str;
	len = str.length();
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < len; j++)
		{
			if (i == 0 && str[j] == (char)(65 + meta[i][j % 3]))
				ans[i]++;
			else if (i == 1 && str[j] == (char)(65 + meta[i][j % 4]))
				ans[i]++;
			else if (i == 2 && str[j] == (char)(65 + meta[i][j % 6]))
				ans[i]++;

		}
	}

	for (int i = 0; i < 3; i++)
		if (max < ans[i])
			max = ans[i];

	cout << max << '\n';
	for (int i = 0; i < 3; i++)
	{
		if (ans[i] == max)
		{
			switch (i)
			{
			case 0:
				cout << "Adrian\n";
				break;
			case 1:
				cout << "Bruno\n";
				break;
			case 2:
				cout << "Goran\n";
				break;
			default:
				break;
			}
		}
	}
}




Tip

그냥 무식하게 세 사람의 문제 풀이 메타를 비교해가면서 몇 개가 적중했는지 카운팅하는 문제로, 문자열 처리 조금과 배열을 이용하면 쉽게 풀 수 있다.



728x90