안녕하세요. 오늘은 채점을 할 거예요.
https://www.acmicpc.net/problem/30980
한문제 한문제 차근차근 봅시다.
어떤 문제가 있으면 a+b=c의 꼴이 됩니다. 이때 c가 무엇인지부터 알아야 합니다. 그래서 to_int함수로 특정 위치부터 수를 쭉 찾아낼 겁니다.
이렇게 a,b,c를 구했으면 a+b가 c인지 확인하면 됩니다. 만약 정답이면 동그라미를 그려주면 됩니다. 이 동그라미의 모양은 c가 몇자리수인지에 따라서 달라집니다.
#include <iostream>
#include <string>
using namespace std;
string s[222];
int to_int(int x, int y)
{
int ans = 0;
while ('0' <= s[x][y] && s[x][y] <= '9')
{
ans *= 10;
ans += s[x][y] - '0';
y++;
}
return ans;
}
void correct(int x, int y)
{
int i;
for (i = 1; i <= 5; i++)
{
s[x][y + i] = '*';
s[x + 2][y + i] = '*';
}
s[x + 1][y] = '*';
if (to_int(x + 1, y + 5) >= 10)
{
s[x][y + 6] = '*';
s[x + 1][y + 7] = '*';
s[x + 2][y + 6] = '*';
}
else
{
s[x + 1][y + 6] = '*';
}
}
void wrong(int x, int y)
{
s[x][y + 3] = s[x + 1][y + 2] = s[x + 2][y + 1] = '/';
}
int main()
{
ios_base::sync_with_stdio(false); cin.tie(NULL);
int N, M, i, j;
cin >> N >> M;
for (i = 0; i < 3 * N; i++) cin >> s[i];
for (i = 0; i < 3 * N; i += 3)
{
for (j = 0; j < 8 * M; j += 8)
{
int a = to_int(i + 1, j + 1), b = to_int(i + 1, j + 3), c = to_int(i + 1, j + 5);
if (a + b == c) correct(i, j);
else wrong(i, j);
}
}
for (i = 0; i < 3 * N; i++)
cout << s[i] << "\n";
}
감사합니다.