#include<stdio.h>
typedef unsigned char uc;
typedef unsigned short us;
static const int MAX_SIZE = 2501;
int main()
{
int i, j, k;
us N, M;
scanf("%hu %hu", &N, &M);
short size = N * M;
int result = 0;
uc a[MAX_SIZE];
uc b[MAX_SIZE];
for (i = 0; i < size; ++i)
{
scanf("%1d", &a[i]);
/*scanf(" %c", &a[i]);
a[i] -= 48;*/
}
for (i = 0; i < size; ++i)
{
scanf("%1d", &b[i]);
/*scanf(" %c", &b[i]);
b[i] -= 48;*/
}
if (N < 3 || M < 3)
{
for (i = 0; i < size; ++i)
{
if (a[i] != b[i])
{
printf("-1");
return 0;
}
}
printf("0");
return 0;
}
for (i = 0; i <= N - 3; ++i)
{
for (j = M * i; j <= M * (i + 1) - 3; ++j)
{
if (a[j] != b[j])
{
a[j + (M * 0)] = !a[j + (M * 0)]; a[j + (M * 0) + 1] = !a[j + (M * 0) + 1]; a[j + (M * 0) + 2] = !a[j + (M * 0) + 2];
a[j + (M * 1)] = !a[j + (M * 1)]; a[j + (M * 1) + 1] = !a[j + (M * 1) + 1]; a[j + (M * 1) + 2] = !a[j + (M * 1) + 2];
a[j + (M * 2)] = !a[j + (M * 2)]; a[j + (M * 2) + 1] = !a[j + (M * 2) + 1]; a[j + (M * 2) + 2] = !a[j + (M * 2) + 2];
++result;
}
}
if (a[M - 2] != b[M - 2] || a[M - 1] != b[M - 1])
{
result = -1;
break;
}
}
for (i = size - 1; size - (M * 2) < i; --i)
{
if (a[i] != b[i])
{
result = -1;
break;
}
}
printf("%d", result);
return 0;
}
약 30분동안 고민했지만 로직이 생각나지 않았던 문제.. 나에게는 너무 어려웠다..
||사용 기법
- 그리디
||풀면서 느낀 것
- 여러 Input값을 생각 못하고 테스트 케이스만 통과되면 제출하는 버릇이 있다.
그래서 그런지 여러 예외 처리를 하지 못하는 모습을 보이고 있다.
반례 또한 스스로 생각해야 하는데 질문 게시판에서 찾아보게되더라 =~=
이런 다양한 Input값을 통한 예외, 반례 이런걸 스스로 생각 하는 습관을 들일것이다.
- 올바른 자료형 채택
이번에는 자료형을 무작정 int가 아닌 제한된 범위에 맞는 자료형을 맞추려 시도했다.
근데 꼼꼼히 생각하지 않았는지 이 때문에 여러 문제가 생기고 시간이 많이 소요됐다.
특히 배열의 최대 사이즈가 2500인데 unsigned char로 잡는 바람에 로직이 다 맞음에도 틀렸다. 시발
- 좀 더 꼼꼼한 설계
위와 비슷한 맥락이다. 항상 문제를 파악하고 설계를 하고 손코딩을 해보지만 설렁설렁한다는 느낌이 있어서
이번에 시간이 많이 소요되었다. 이번에 반복문에서 out of range, out of bound 도 많이 났었고
인덱스 규칙도 하나를 빼먹거나 해서 좀 꼼꼼하게 설계를 해야겠다.
||새로 알게 된것
- byte라는 타입은 C++ 17에 추가 되었으며(std::byte) 산술 연산이 불가능하다.
이번에 알맞은 자료형을 사용하려고 하면서 byte를 사용해봤는데 산술연산이 불가능했다.
나중에 연산이 안되는 점을 이용할 수 도 있겠다.
연산을 하려면 char종류나 uint8을 사용하면 되겠다.
||나아 진것
- 문제 파악
예전에는 난독증 마냥 읽어도 무슨말인지 모르는 경우가 많았는데
최근에는 문제 해석은 잘 되는듯 하다!
'코딩 테스트 > 알고리즘 풀이' 카테고리의 다른 글
[백준 - 9012] 괄호 (0) | 2022.07.31 |
---|---|
[백준 - 9093] 단어 뒤집기 (0) | 2022.07.31 |
[백준 - 1715] 카드 정렬하기 (0) | 2022.07.28 |
[백준 - 2751] 수 정렬하기2 (0) | 2022.07.27 |
[백준 - 10610] 30 (0) | 2022.07.27 |