반응형
250x250
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
- SKT
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online
- R
- 직장인자기계발
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지
- AI
- 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.
- 패캠챌린지
- 직장인인강
- 한번에끝내는Java/Spring웹개발마스터초격차패키지
- 패스트캠퍼스
- 패스트캠퍼스후기
- albert
- 알버트
Archives
- Today
- Total
제주 탈출 일지
[C++] nhn 사전 테스트 - 행렬의 영역 본문
728x90
반응형
사전테스트인데 pre-test로 헷갈렸다. 죄송함니다.ㅠㅠ
사전테스트 행렬의 영역 1번
효율성 테스트를 통과하지 못했다 ㅠㅠ. 앞으로의 코딩 밑거름이 되길..

(입력)
6
0 1 1 0 0 0
0 1 1 0 1 1
0 0 0 0 1 1
0 0 0 0 1 1
1 1 0 0 1 0
1 1 1 0 0 0
(출력)
3
4 5 7
입력은 N*N 행렬의 크기, 행렬의 원소를 개행문자로 입력한다.
출력은 영역의 갯수, 영역의 크기를 출력한다. 영역의 크기는 오름차순 정렬되어야 한다.
dfs는 깊이 우선 탐색 알고리즘을 응용하여 작성하였지만, 기억나는데로 짠거라 아닐수도 있다...
#include <iostream>
#include <sstream>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
stack<pair<int, int> > s;
vector<vector<bool> > visit;
int dfs(int **matrix, int i, int j)
{
//(i,j)가 시작점.
int area = 0;
s.push(pair<int, int>(i,j));
while(!s.empty())
{
int ci = s.top().first;
int cj = s.top().second;
visit[ci][cj] = true;
if(cj < visit.size() - 1 && matrix[ci][cj+1] == 1 && visit.at(ci)[cj+1] == false) //오른쪽 방향
{
s.push(pair<int, int> (ci, cj+1));
}
else if(cj > 1 && matrix[ci][cj-1] == 1 && visit.at(ci)[cj-1] == false) //왼쪽 방향
{
s.push(pair<int, int> (ci, cj-1));
}
else if(ci > 1 && matrix[ci-1][cj] == 1 && visit.at(ci-1)[cj] == false) //위쪽 방향
{
s.push(pair<int, int> (ci, cj-1));
}
else if(ci < visit.size() - 1 && matrix[ci+1][cj] == 1 && visit.at(ci+1)[cj] == false) //아래 방향
{
s.push(pair<int, int> (ci+1, cj));
}
else
{
s.pop();
area += 1;
}
}
return area;
}
void solution(int sizeOfMatrix, int **matrix) {
// TODO: 이곳에 코드를 작성하세요.
vector<bool> vis1 (sizeOfMatrix, false);
for(int i = 0; i < sizeOfMatrix; i++)
visit.push_back(vis1);
vector<int> answer;
for(int i = 0 ; i < sizeOfMatrix; i ++)
{
for(int j = 0; j <sizeOfMatrix; j ++)
{
if(visit[i][j] == false && (matrix[i][j] == 1))
{
answer.push_back(dfs(matrix, i, j));
}
}
}
sort(answer.begin(), answer.end());
cout << answer.size() << endl;
for(int i = 0; i < answer.size(); i++)
cout << answer[i] << " ";
}
struct input_data {
int sizeOfMatrix;
int **matrix;
};
void process_stdin(struct input_data& inputData) {
string line;
istringstream iss;
getline(cin, line);
iss.str(line);
iss >> inputData.sizeOfMatrix;
inputData.matrix = new int*[inputData.sizeOfMatrix];
for (int i = 0; i < inputData.sizeOfMatrix; i++) {
getline(cin, line);
iss.clear();
iss.str(line);
inputData.matrix[i] = new int[inputData.sizeOfMatrix];
for (int j = 0; j < inputData.sizeOfMatrix; j++) {
iss >> inputData.matrix[i][j];
}
}
}
int main() {
struct input_data inputData;
process_stdin(inputData);
solution(inputData.sizeOfMatrix, inputData.matrix);
return 0;
}
728x90
반응형
'코딩 테스트' 카테고리의 다른 글
[c++][python3] 프로그래머스 레벨 1 - 모의고사 (0) | 2020.10.26 |
---|---|
[c++] nhn pre-test 1 - 1 (0) | 2020.10.24 |
[C++] 프로그래머스 레벨 1 - 완주하지 못한 사람 구하기 (0) | 2020.10.24 |
[C++] 프로그래머스 레벨 1 - 두 개 뽑아서 더하기 (0) | 2020.10.23 |
[C++] 프로그래머스 레벨 1 - 크레인 인형뽑기 (0) | 2020.10.23 |
Comments