본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 3085 사탕 게임

by 까망 하르방 2021. 7. 24.
반응형

출처https://www.acmicpc.net/problem/3085

Approach

완전탐색  유형 문제이다.

 

완전탐색 기법이란?

가능한 모든 값을 대입해보는 무식한(?) 방법에 해당된다. 문제 내용 속에서 특정 규칙을 찾아서 모든 Case를 대입해보지 않고도 풀리는 경우도 있지만 충분한 제한 공간과 시간이 주어진다면 

zoosso.tistory.com

 

인접한 2 칸을 선택하고 위치를 서로 교환한다.

(대각선은 인접하지 않으며 세로/가로 방향으로 인접한 것으로 정의)

 

- 최대 N이 크지 않은 수치이기 때문에  (3 ≤ N ≤ 50)

  세로 방향과 가로 방향으로 구분해서 변경할 수 있는 위치를 모두 바꿔(swap)본다.

- 바꿔볼 때마다 먹을 수 있는 사탕 개수를 확인하다.

- 최대로 먹을 수 있는 사탕 개수를 갱신하가며 저장

- 위치 변경하고 다음 Case를 위해서 위치를 원상복구 해준다.

 

구현 순서

① 세로 방향으로 (위치)교환 시도

    - 가로줄로 먹을 수 있는 최대 사탕 개수 확인

    - 세로줄로 먹을 수 있는 최대 사탕 개수 확인

② 가로 방향으로 (위치)교환 시도

    - 가로줄로 먹을 수 있는 최대 사탕 개수 확인

    - 세로줄로 먹을 수 있는 최대 사탕 개수 확인


#include <iostream>

using namespace std;
const int MAX_N = 50 + 2;
int n, ans, cnt;
char map[MAX_N][MAX_N];
inline void swap(char &A, char &B) { char tmp = A; A = B; B = tmp; }
inline int max(int A, int B) { return A > B ? A : B; }

void input()
{
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			cin >> map[i][j];
		}
	}
}

void checkHorizontal()
{
	for (int i = 0; i < n; i++)
	{
		cnt = 1;
		for (int j = 0; j < n; j++)
		{
			if (map[i][j] == map[i][j + 1])
			{
				cnt++;
			}
			else
			{
				ans = max(ans, cnt);
				cnt = 1;
			}
		}
	}
}

void checkVertical()
{
	for (int i = 0; i < n; i++)
	{
		cnt = 1;
		for (int j = 0; j < n; j++)
		{
			if (map[j][i] == map[j + 1][i])
			{
				cnt++;
			}
			else
			{
				ans = max(ans, cnt);
				cnt = 1;
			}
		}
	}
}

int main()
{
	// freopen("input.txt", "r", stdin);
	input();

	// 세로 방향 교환
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n - 1; j++)
		{
			swap(map[i][j], map[i][j + 1]);
			checkVertical();
			checkHorizontal();
			swap(map[i][j], map[i][j + 1]);
		}
	}

	// 가로 방향 교환
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n - 1; j++)
		{
			swap(map[j][i], map[j+1][i]);
			checkVertical();
			checkHorizontal();
			swap(map[j][i], map[j + 1][i]);
		}
	}

	printf("%d\n", ans);
}
반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 2309 일곱 난쟁이  (0) 2021.07.28
[BOJ] 백준 2231 분해합  (0) 2021.07.27
[BOJ] 백준 10448 유레카 이론  (0) 2021.07.23
[BOJ] 백준 18258 큐 2  (0) 2021.07.22
[BOJ] 백준 10845 큐  (0) 2021.07.22

댓글