티스토리 뷰
반응형
주어진 그림이 몇 개의 영역으로 나눠져 있으며 제일 넓은 부분은 어디인지 구하는 문제
문제의 조건
1. 그림의 세로 m, 가로 n, m x n 2차원 배열 picture가 주어짐
2. 주어진 그림에서 상하좌우 방향으로 연속한 숫자들만 같은 영역으로 침
-> BFS로 연속한 같은 숫자끼리의 넓이를 구하자
3. 영역이 몇 개인지, 그 중 가장 넓은 영역 크기는 몇인지 구하기
4. 전역변수는 solution 함수 안에서 초기화 해 주어야 함
#include <vector>
#include <memory.h>
#include <queue>
using namespace std;
int dir[4][2];
vector<pair<int, int>> Pixels(pair<int, int> curPos, int m, int n)
{
vector<pair<int, int>> pixels;
for (int i = 0; 4 > i; i++)
{
pair<int, int> pos;
pos = make_pair(curPos.first + dir[i][1], curPos.second + dir[i][0]);
//위치 범위 설정
if (0 <= pos.first && 0 <= pos.second && n > pos.first && m > pos.second)
pixels.push_back(pos);
}
return pixels;
}
vector<vector<bool>> visited;
vector<int> solution(int m, int n, vector<vector<int>> picture) {
dir[0][0] = -1;
dir[0][1] = 0;
dir[1][0] = 1;
dir[1][1] = 0;
dir[2][0] = 0;
dir[2][1] = -1;
dir[3][0] = 0;
dir[3][1] = 1;
visited.assign(100, vector<bool>(100, false));
int number_of_area = 0;
int max_size_of_one_area = 0;
for (int y = 0; picture.size() > y; y++)
{
for (int x = 0; picture[y].size() > x; x++)
{
if (!visited[y][x] && 0 < picture[y][x])
{
queue<pair<int, int>> nonVisited;
int range = 0;
int curNum = picture[y][x];
nonVisited.push(make_pair(x, y));
while (!nonVisited.empty())
{
pair<int, int> curPixel = nonVisited.front();
nonVisited.pop();
//현재 픽셀을 방문하지 않았으면 방문 표시
if (!visited[curPixel.second][curPixel.first] && curNum == picture[curPixel.second][curPixel.first])
{
range++;
visited[curPixel.second][curPixel.first] = true;
//인접한 픽셀 중에서 방문하지 않은 픽셀이 있으면 큐에 추가
vector<pair<int, int>> nearby = Pixels(curPixel, m, n);
for (auto& p: nearby)
{
if (!visited[p.second][p.first])
nonVisited.push(p);
}
}
}
max_size_of_one_area = max(max_size_of_one_area, range);
number_of_area++;
}
}
}
vector<int> answer(2);
answer[0] = number_of_area;
answer[1] = max_size_of_one_area;
return answer;
}
휴... Pixels 함수에서 picture 인덱스 범위보다 커질 때 범위 설정을 제대로 안 해줘서 계속 out of index 에러가 나서 몇 시간 날린 문제 ㅠ.ㅠ
첨엔 저거 생각도 못 하고 왜 안되지 하다가 하나하나 디버깅 하면서 깨달았습니다...
정말 ㅈ같은 문제였어
그리고 전역변수는 꼭 함수 안에서 초기화를 해 주어야 통과됩니다.
반응형
'알고리즘 문제 풀이' 카테고리의 다른 글
[C++] 프로그래머스 기능개발 풀이 (0) | 2021.10.11 |
---|---|
[C++] 프로그래머스 조이스틱 풀이 (0) | 2021.10.10 |
[C++] 프로그래머스 124 나라의 숫자 풀이 (0) | 2021.10.08 |
[C++] 프로그래머스 비밀지도 풀이 (0) | 2021.10.06 |
[C++] 프로그래머스 부족한 금액 계산하기 풀이 (0) | 2021.10.06 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 컴퓨터공부
- DFS
- 코딩공부
- c++
- 아이패드
- 캐나다
- 다이나믹프로그래밍
- 기초
- 하드웨어
- dp
- BFS
- C언어기초
- 깊이우선탐색
- 알고리즘
- c언어
- hackerrank
- 컴퓨터사이언스
- 그리디
- 프로그래밍
- 영어공부
- 캐나다생활
- 해커랭크
- 스위프트플레이그라운드
- greedy
- 문제풀이
- 애플
- 컴퓨터
- 백준
- 너비우선탐색
- 프로그래머스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함