백준 1236 - 성 지키기(C언어)

컴퓨터/문제풀이집

728x90
반응형

 

1236번: 성 지키기

첫째 줄에 성의 세로 크기 N과 가로 크기 M이 주어진다. N과 M은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 성의 상태가 주어진다. 성의 상태는 .은 빈칸, X는 경비원이 있는 칸이다

www.acmicpc.net

문제 파악 및 구현 준비

  • 가로 X 세로 최대 50 X 50
  • 모든 행과 열에 X(경비원)을 최소 한명 배치 
  • 즉 행과 열중 큰 행 또는 열 만큼 경비원의 수가 필요하다.
    • 입력된 경비원의 수 파악 행기준 및 열기준 
    • 최대 값 (행과 열의 크기)에서 탐색된 경비원의 수만큼 1씩 감소하여 탐색방법 구현
      • 이 경우 행 또는 열이 1인경우 문제가 있을수 있으므로 예외 처리하였음.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main()
{
	// 배열 및 가로 세로 크기 선언
	char arr[50][50] = { 0,};
	int R;
	int C;

	// 세로 가로 입력
	scanf("%d %d", &R, &C);

	//반복하며 숫자 체우기 
	for (int i = 0; i < R; i++)
	{
		scanf("%s", arr[i]);
	}


	//최대 발생될 경우에 수 파악 밑 X가 들어있는 값 확인하기
	//X가 들어있다면 경비원이 있으므로 최대값에서 하나씩 감소
	int tempR = R;
	int tempC = C;


	//세로 기준 탐색

	for (int i = 0; i < R; i++)
	{
		for (int j = 0; j < C; j++)
		{
			if (arr[i][j] == 'X')
			{
				tempR--;
				break;
			}
		}
	}

	//가로 기준 탐색
	for (int i = 0; i < C; i++)
	{
		for (int j = 0; j < R; j++)
		{
			if (arr[j][i] == 'X')
			{
				tempC--;
				break;
			}
		}
	}
	// 직사각형중 영역 확인하기 및 결과 변수의 최대값 대입

	if (R == 1)
	{
		printf("%d\n", tempC);
	}
	else if (C == 1)
	{
		printf("%d\n", tempR);
	}
	else
	{
		printf("%d\n", tempR < tempC ? tempC : tempR);

	}
	return 0;
}

후기

  • 엄청 쉽게 구현 가능하다 생각했으나 행 또는 열이 1인 경우를 생각하지 못해 반례를 찾는데 오래 걸림
728x90
반응형

Commnet

G91개발일지

Gon91(지구일)

91년생 공학엔지니어의 개발일지

TODAY :

YESTER DAY :

TOTAL :