반응형
시간을 보고 DFS는 아니라고 생각해서 벡터랑 조건처리로 수행했는데 시간초과 발생.
생각해보니 벡터도 필요 없는 문제였다.
최대가 되려면 조금만 생각해보면 처음 인덱스부터 꽉꽉 채우면서 2거리에 있는 것만 비우면 되었기 때문에
배열로 visit처리 해주면서 상하좌우 2거리만 없으면 개수 +1 진행.
#include<iostream>
#include<vector>
#include<string.h>
#include<algorithm>
#include<cmath>
using namespace std;
int N, M;
bool arr[1000][1000];
int main(int argc, char** argv)
{
int test_case;
int T;
cin >> T;
/*
여러 개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
*/
for (test_case = 1; test_case <= T; ++test_case)
{
cin >> N >> M;
int result = 0;
memset(arr, 0, sizeof(arr));
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
if (!arr[i][j])
{
bool flag = false;
if (i - 2 >= 0)
{
if (arr[i - 2][j])
{
flag = true;
}
}
if (i + 2 < N)
{
if (arr[i + 2][j])
{
flag = true;
}
}
if (j - 2 >= 0)
{
if (arr[i][j - 2])
{
flag = true;
}
}
if (j + 2 < M)
{
if (arr[i][j + 2])
{
flag = true;
}
}
if (!flag)
{
arr[i][j] = true;
result++;
}
}
}
}
cout << "#" << test_case << " " << result << endl;
}
return 0;//정상종료시 반드시 0을 리턴해야합니다.
}
반응형
'Algorithm' 카테고리의 다른 글
1486. 장훈이의 높은 선반 (0) | 2020.04.30 |
---|---|
백준 15686번 치킨배달 재풀이 (0) | 2020.04.30 |
4050. 재관이의 대량 할인 (0) | 2020.04.28 |
6109. 추억의 2048게임 (0) | 2020.04.27 |
5432. 쇠막대기 자르기 (0) | 2020.04.26 |