발효홍삼
코딩하는 홍삼
발효홍삼
전체 방문자
오늘
어제
  • 분류 전체보기 (142)
    • PS (63)
      • 프로그래머스 (9)
      • 코드업 (10)
      • 백준 (43)
      • 알고스팟 (1)
    • Programming Language (11)
      • html_css (2)
      • java (0)
      • c,c++ (2)
      • vanillajs (2)
      • react (0)
      • vue.js (0)
      • angular.js (0)
      • electron (3)
      • 엄랭(Umjunsik-lang) (1)
      • F# (1)
      • Node.js (0)
      • Go (0)
    • knowledge (41)
      • algorithm (3)
      • data structure (1)
      • os (1)
      • ML (1)
      • math (31)
      • paper review (0)
      • IT-license (4)
    • Programming Guide (27)
      • React (1)
      • Electron (2)
      • CSS , SASS ( SCSS ) , Tailw.. (3)
      • Node.js (1)
      • Go (1)
      • Ruby on Rails (2)
      • R (1)
      • PHP (1)
      • Docker (1)
      • JSP (1)
      • C# (1)
      • Django (1)
      • Flask (1)
      • Dart (1)
      • Next.js (1)
      • Vue.js (1)
      • Unity (1)
      • React Native (0)
      • Flutter (3)
      • GraphQL (1)
      • MongoDB (1)
      • .NET (1)
      • RUST (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 이산수학
  • LV1
  • 파이썬
  • 기초백제
  • nodejs
  • java
  • electron
  • 미적분학
  • 프로그래머스
  • 미분
  • 기초100제
  • 정보처리기능사 필기
  • 백준
  • 코드업
  • Python
  • 적분
  • 알고리즘
  • 자바
  • c++
  • codeup
  • CSS
  • 구현
  • 정보처리기능사
  • 수학
  • C
  • 출력
  • js
  • JavaScript
  • HTML
  • cpp

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
발효홍삼

코딩하는 홍삼

[ 백준 ] 2583번: 영역 구하기
PS/백준

[ 백준 ] 2583번: 영역 구하기

2022. 3. 15. 02:23
728x90
  •  문제

https://www.acmicpc.net/problem/2583

 

2583번: 영역 구하기

첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오

www.acmicpc.net


  • 풀이법 ( 알고리즘 )

이차원 배열을 선언하고 입력받은 직사각형의 꼭짓점의 좌표들을 이용해 직사각형의 넓이만큼 이차원 배열에 저장해주었다. 이후 이차원 배열을 돌며 각 영역의 넓이를 구해 ans 배열에 넣어주었다.


  •  풀이 - C++
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int m, n, k, cnt; // m * n 크기 모눈 종이 , k : 직사각형의 개수
int paper[101][101];
int dx[] = { 1,-1,0,0 };
int dy[] = { 0,0,1,-1 };
bool visit[101][101];
vector <int> ans;

void dfs(int x, int y)
{
	if(paper[x][y] || visit[x][y]) return;

	visit[x][y] = true;
	cnt++;

	for (int i = 0; i < 4; i++)
	{
		int X = dx[i] + x;
		int Y = dy[i] + y;

		if (X < 0 || X >= m || Y < 0 || Y >= n || visit[X][Y] || paper[X][Y]) continue;
		dfs(X, Y);
	}

}

int main(void)
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	
	//input
	cin >> m >> n >> k;

	for (int i = 0; i < k; i++)
	{
		int leftBottomX, leftBottomY;
		int rightTopX, rightTopY;

		cin >> leftBottomX >> leftBottomY >> rightTopX >> rightTopY;

		for (int j = leftBottomY; j < rightTopY; j++)
		{
			for (int k = leftBottomX; k < rightTopX; k++)
				paper[j][k] = 1;
		}

	}

	/*for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
			cout << paper[i][j] << " ";
		cout << "\n";
	}*/

	for (int i = 0; i < m; i++)
	{
		for (int j = 0; j < n; j++)
		{
			if (!paper[i][j] && !visit[i][j])
			{
				dfs(i, j);
				ans.push_back(cnt);
				cnt = 0;
			}
		}
	}

	cout << ans.size() << "\n";
	sort(ans.begin(), ans.end());

	for (int i = 0; i < ans.size(); i++)
		cout << ans[i] << " ";

}
728x90
저작자표시 비영리 (새창열림)

'PS > 백준' 카테고리의 다른 글

[ 백준 ] 1644번 : 소수의 연속합 - (C/C++/CPP)  (0) 2022.03.17
[ 백준 ] 15686번 : 치킨 배달 - ( C++/C/CPP )  (0) 2022.03.15
[ 백준 ] 2485번 : 가로수 - ( C++ / C )  (0) 2022.03.15
[ 백준 ] 2660번 : 회장뽑기 ( C++/C )  (0) 2022.03.10
[ 백준 ] 11723번 : 집합 - ( C++ / C )  (0) 2022.03.05
    'PS/백준' 카테고리의 다른 글
    • [ 백준 ] 1644번 : 소수의 연속합 - (C/C++/CPP)
    • [ 백준 ] 15686번 : 치킨 배달 - ( C++/C/CPP )
    • [ 백준 ] 2485번 : 가로수 - ( C++ / C )
    • [ 백준 ] 2660번 : 회장뽑기 ( C++/C )
    발효홍삼
    발효홍삼
    코딩하는 홍삼

    티스토리툴바