강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

김지환님의 프로필 이미지
김지환

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

2 - D map 초기화

작성

·

130

0

답안 코드에서 x,y 좌표를 입력받고 그대로 map[y][x]=1의 작업을 수행하면

예시에서 나온 그림처럼 그려지지 않고 대충 x 축 대칭된 모양과 비슷하게 그려지는데

이 문제 뿐 아니라 다른 문제에서도 문제가 되지 않나요?

 

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 지환님. ㅎㅎ

왜 대칭적으로 그려질까요?

자 예시에서 보여주는 그림은. 위쪽으로 0, 1, 2, 3 y좌표가 증가하죠?

근데 우리가 그리는 것은 아래쪽으로 0, 1, 2, 3 y좌표가 증가하죠? 그렇기 때문에 y축 대칭적으로 보이는 것일뿐. 

올바르게 입력받고 올바르게 출력한것입니다. 

 

만약 대칭적으로 출력하지 않고 싶다면 이렇게 하시면 됩니다.  

m - 1부터 하시면 됩니다.

#include <cstdio>
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <stack>
using namespace std;  
int _map[104][104], m, n, k, x1, x2, y1, y2;
const int dy[4] = {-1, 0, 1, 0};
const int dx[4] = {0, 1, 0, -1};
vector<int> ret;
int dfs(int y, int x){
    _map[y][x] = 1;
    int _ret = 1;
    for(int i = 0; i < 4; i++){
        int ny = y + dy[i];
        int nx = x + dx[i];
        if(ny < 0 || ny >= m || nx < 0 || nx >= n || _map[ny][nx] == 1) continue;
        _ret += dfs(ny, nx);
    }
    return _ret;
}
int main() {
    ios_base::sync_with_stdio(false);  
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> m >> n >> k;
    for(int i = 0; i < k; i++){
        cin >> x1 >> y1 >> x2 >> y2;  
        for(int y = y1; y < y2; y++){
            for(int x = x1; x < x2; x++){
                _map[y][x] = 1;
            }
        }
    }
    for(int i = m - 1; i >= 0; i--){
        for(int j = 0; j < n; j++){
            if(_map[i][j] == 1) cout << 1 << " ";
            else cout << "0" << ' ';
        }
        cout << '\n';
    }
    for(int i = 0; i < m; i++){
        for(int j = 0; j < n; j++){
            if(_map[i][j] != 1) {
                ret.push_back(dfs(i, j));
            }
        }
    }
    sort(ret.begin(), ret.end());
    cout << ret.size() << "\n";
    for(int _ret : ret) cout << _ret << "\n";
    return 0;
}
/*
5 7 3
0 2 4 4
1 1 2 5
4 0 6 2
0 1 0 0 0 0 0
1 1 1 1 0 0 0
1 1 1 1 0 0 0
0 1 0 0 1 1 0
0 0 0 0 1 1 0
3
1
7
13

*/

 

김지환님의 프로필 이미지
김지환

작성한 질문수

질문하기