inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

2 - D map 초기화

139

김지환

작성한 질문수 12

0

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

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

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

 

C++ 코테 준비 같이 해요!

답변 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

*/

 

1-E질문입니다!

0

533

2

3-L 틀린 부분 피드백 부탁드립니다.

0

837

2

1-A문제 순열재귀함수 질문입니다.

0

396

1

1-A 일곱난쟁이문제입니다

0

471

1

문제 풀 때 방향성에 대해

0

811

1

맥에서 vs code로 실행 관련 질문입니다

0

530

1

17071번 메모리 초과

0

390

1

1-C질문입니다!

0

428

2

2-B BFS 시간초과질문

0

638

2

1-O 13번 라인

0

447

1

6-J 놀이공원 문제 질문

0

390

1

구현관련 질문

0

492

1

강의 교안

0

322

1

실력을 더 올리고나서 강의를 보는 것이 맞을까요?

0

550

1

안녕하세요! 재귀함수에 관해서 질문드립니다

0

540

1

1-K

0

481

2

3-G번 질문있습니다.

1

482

3

3-C 실행 시간 질문드립니다.

0

504

1

4-A 문제 풀이 질문있습니다.

0

602

2

비트마스킹 연산자 "1의 보수" 영문 표기법

0

441

1

격자탐색 문제에서 BFS 시간복잡도 질문드립니다.

0

349

1

3-O go 함수 질문 드립니다.

1

453

2

4-A 출력 질문

0

308

1

1주차 1-O 질문드립니다

0

266

1