Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- BFS
- 알고리즘
- C#
- C
- 통계
- 이분탐색
- 선형대수학
- 프로그래머스
- 입출력
- 철자검사
- horner algorithm
- 확률
- C++
- 프로그래머스 c#
- 백준 9465
- 문자열
- 백준
- 9095 C++
- 파라메트릭 서치
- cpp
- 코딩테스트
- 확률론
- dp
- horner
- 스티커 C++
- 백준 C#
- 수치해석
- 프로그래머스C#
- 통계학
- 너비우선탐색
Archives
- Today
- Total
HOIT_B
[ 백준 C++ ]1926 그림 본문
728x90
C++ 공부하기!
문제
https://www.acmicpc.net/problem/1926
1926번: 그림
어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로
www.acmicpc.net
C++ 공부가 목표이기 때문에 풀이X
Vector의 사용을 위해선 <vector>헤더 파일을 추가해야한다.
선언은 vector <데이터 타입> 변수이름;
*max_element사용하기 위해서는 <algorithm> 헤더 파일 추가해야한다.
*max_element사용하면 [시작, 끝) 범위 중 가장 큰 값의 value를 반환한다.
코드
#include <iostream>
#include <algorithm>
#include <queue>
#include <utility>
#include <vector>
using namespace std;
int n,m;
int picture[501][501];
int visit[501][501];
// 현재위치의 상,하,좌,우를 살피기 위함
int x[4] = {0,0,1,-1};
int y[4] = {1,-1,0,0};
int bfs(int s1,int s2)
{
int funcnt = 0;
queue <pair <int,int>>q;
//큐에 현재 위치를 넣는다.
q.push(make_pair(s1,s2));
while(!q.empty())
{
funcnt++;
pair<int,int> now = q.front();
q.pop();
//범위안에서 현재 위치의 상,하,좌,우에 1이 있는지 찾음
//있다면 큐에 위치를 넣어줌
for(int i=0;i<4; i++)
{
int py = now.first+y[i];
int px = now.second + x[i];
if(0<= py & py < n & 0<= px & px < m & visit[py][px] == 0 & picture[py][px] == 1){
visit[py][px] = 1;
q.push(make_pair(py,px));
}
}
}
return funcnt;
}
int main()
{
int cnt =0;
cin >> n >> m;
//vector container는 자동으로 메모리가 할당되는 배열이다.
//vector의 선언은 - vector<[data type]> [변수이름]
vector <int> v;
v.push_back(0); //마지막 원소 뒤에 원소 0을 삽입한다.
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
cin >> picture[i][j];
}
}
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
if(picture[i][j] == 1 & visit[i][j] == 0){
visit[i][j] = 1;
v.push_back(bfs(i,j));
cnt += 1;
}
}
}
cout << cnt <<endl;
//v 벡터의 시작부터 끝부분까지 중 최대를 출력한다.
cout << *max_element(v.begin(),v.end());
}
728x90
'작고소중한 알고리즘 풀기' 카테고리의 다른 글
[백준 C++] 1012번 유기농 배추 (0) | 2023.11.03 |
---|---|
[백준 C++] 2178번 미로 탐색 (0) | 2023.11.01 |
[프로그래머스 C# ] 문자열의 뒤의 n글자 (0) | 2023.09.20 |
[프로그래머스 C#] 부분 문자열 이어 붙여 문자열 만들기 (0) | 2023.09.20 |
[프로그래머스 C#] 배열 만들기 5 (0) | 2023.09.20 |
Comments