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
- pycon
- Tistory
- 알고리즘
- 불량 사용자
- CleanCode
- 카카오 인턴
- 보행자 천국
- Open API
- Spring Boot
- Python
- 티스토리
- 징검다리 건너기
- 티스토리 open api
- 호텔 방 배정
- 가사 검색
- 튜플
- 프로그래머스
- jdbc
- 크레인 인형뽑기 게임
- 트라이
- bulk update
- trie
- 트라이 #trie #알고리즘
Archives
- Today
- Total
택시짱의 개발 노트
[프로그래머스] 카카오프렌즈 컬러링북 본문
링크
https://programmers.co.kr/learn/courses/30/lessons/1829
풀이
그림에 몇 개의 영역이 있는지와 가장 큰 영역의 넓이는 얼마인지 계산하는 프로그램을 작성하는 문제 이다.
문제를 보았을때 영역의 넓이는 dfs 탐색으로 같은 색상을 상하좌우로 찾아 구할수 있고,
몇 개의 영역이 있는지는 2차원 배열을 탐색하면서 dfs 탐색에 들어가는 횟수를 카운트 해주면 영역의 갯수를 구할 수 있다.
#include<iostream>
#include<vector>
#include<algorithm>
#include<queue>
#include<string>
#include<set>
#include<map>
#include<cstring>
#include<functional>
#define SIZE 110
const int INF = 2000000000;
using namespace std;
typedef long long int ll;
int dx[4] = { -1,0,1,0 };
int dy[4] = { 0,1,0,-1 };
bool visited[SIZE][SIZE];
int dfs(int h_x, int h_y, int h_num, int m ,int n, vector<vector<int>> &picture) {
int cnt = 1;
visited[h_x][h_y] = true;
for (int d = 0; d < 4; d++) {
int n_x = h_x + dx[d];
int n_y = h_y + dy[d];
if (n_x < 0 || n_x >= m || n_y < 0 || n_y >= n)
continue;
if (visited[n_x][n_y] == true)
continue;
if (picture[n_x][n_y] != h_num)
continue;
cnt += dfs(n_x, n_y, h_num,m, n, picture);
}
return cnt;
}
// 전역 변수를 정의할 경우 함수 내에 초기화 코드를 꼭 작성해주세요.
vector<int> solution(int m, int n, vector<vector<int>> picture) {
memset(visited, false, sizeof(visited));
int area = 0;
int group = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (picture[i][j] != 0 && visited[i][j] != true) {
area = max(area,dfs(i, j, picture[i][j], m , n, picture));
group++;
}
}
}
vector<int> answer = { group, area };
return answer;
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int m, n; cin >> m >> n;
vector<vector<int>> picture;
for (int i = 1; i <= m; i++) {
vector<int> p;
for (int j = 1; j <= n; j++) {
int color; cin >> color;
p.push_back(color);
}
picture.push_back(p);
}
vector<int> res = solution(m, n, picture);
return 0;
}
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스] 체육복 (0) | 2020.03.05 |
---|---|
[프로그래머스] 보행자 천국 (0) | 2020.02.25 |
[백준] 14500번 - 테트로미노 (0) | 2020.02.23 |
[백준] 12100번 - 2048 (Easy) (0) | 2020.02.19 |
[프로그래머스] 올바른 괄호의 갯수 (2) | 2020.02.17 |
Comments