티스토리 뷰
1. 문제 링크
https://www.acmicpc.net/problem/2966
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 |
---|
댓글