알고리즘/Brute force
boj, 백준) 2966. 찍기 (C / C++)
KIBBOMI
2020. 4. 15. 00:43
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. 결과 사진
지적, 댓글 언제나 환영입니다~