티스토리 뷰

1. 문제 링크

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

 

2966번: 찍기

문제 상근이, 창영이, 현진이는 역사와 전통을 자랑하는 Sogang ACM-ICPC Team에 가입하려고 한다. 하지만, 가입하려고 하는 모든 지원자는 C언어 필기시험을 통과해야 한다. 이들은 C언어를 할 줄 모른다. 따라서, 필기시험을 모두 찍으려고 한다. 상근이는 A, B, C, A, B, C, A, B, C, A, B, C, ...와 같이 찍어야 통과할 수 있다고 생각한다.  하지만, 창영이는 B, A, B, C, B, A, B, C, B, A, B

www.acmicpc.net

 

2. 문제 개요

상근이는 A B C A B C A B C...

창영이는 B A B C B A B C B...

현진이는 C C A A B B C C A...

로 찍으려고 할 때, 주어진 문제의 답을 보고 가장 많이 맞힌사람이 누구인지 구하는 프로그램 작성하기.

 

3. 문제 힌트

 특별한 알고리즘이 필요 없다. 그냥 전수조사.

 

4. 문제 풀이

첫 번째 Adrian은 1, 4, 7... 번 인덱스는 A,  2, 5, 8은 B... 와 같이 3씩 커진다. 따라서 %3 연산을 사용한다.

 

두 번째는 4마다 값이 반복되므로 %4 연산을 사용하여 값을 구해준다. 자세한 것은 코드를 보면 바로 이해가 될 것이다.

 

세 번째는 6마다 값이 반복된다. 이 또한 코드를 보면 바로 이해가 될 것이다.

 

선택한 답안을 모두 저장하고 다시 첫 번째 인덱스부터 비교하여 채점한다.

그리고 출력.

 

5. 코드

#include <stdio.h>

char a[100] = { 0 }, b[100] = { 0 }, g[100] = { 0 };
char sol[100] = { 0 };

int n;
int as, bs, gs;

int main(void)
{
	scanf("%d", &n);

	//init Adrian, Bruno, Goran
	for (int i = 0; i < n; i++)
	{
		if (i % 3 == 0)
			a[i] = 'A';
		else if (i % 3 == 1)
			a[i] = 'B';
		else
			a[i] = 'C';
	}
	for (int i = 0; i < n; i++)
	{
		if (i % 4 == 0)
			b[i] = 'B';
		else if (i % 4 == 1)
			b[i] = 'A';
		else if (i % 4 == 2)
			b[i] = 'B';
		else
			b[i] = 'C';
	}
	for (int i = 0; i < n; i++)
	{
		if (i % 6 == 0 || i % 6 == 1)
			g[i] = 'C';
		else if (i % 6 == 2 || i % 6 == 3)
			g[i] = 'A';
		else if (i % 6 == 4 || i % 6 == 5)
			g[i] = 'B';
	}
	scanf("%s", sol);

	for (int i = 0; i < n; i++)
	{
		if (sol[i] == a[i])
			as++;
		if (sol[i] == b[i])
			bs++;
		if (sol[i] == g[i])
			gs++;
	}
	int maxval = -1;
	if (maxval < as)
		maxval = as;
	if (maxval < bs)
		maxval = bs;
	if (maxval < gs)
		maxval = gs;

	printf("%d\n", maxval);
	if (maxval == as)
		printf("Adrian\n");
	if (maxval == bs)
		printf("Bruno\n");
	if (maxval == gs)
		printf("Goran\n");

	return 0;
}

6. 결과 사진

 

지적, 댓글 언제나 환영입니다~

'알고리즘 > Brute force' 카테고리의 다른 글

boj, 백준) 2-SAT - 1  (0) 2021.04.04
댓글
«   2024/05   »
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
Total
Today
Yesterday