작성
·
178
·
수정됨
0
[47번 봉우리 문제]
똑같은 논리로 구조를 짰는데, 하나는 정답이고 하나는 오답이에요.
왜일까요? 제가 생각했을때 둘의 차이는 배열의 할당 방식뿐입니다. (정적vs동적)
배열을 포인팅 하는 방식에서 잘못된게 있나요...?
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <queue>
#include <vector>
using namespace std;
const int dir[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
int map[52][52], mem[52][52];
int n, i, j, cnt = 0;
int main(void)
{
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
scanf("%d", &map[i][j]);
}
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
{
int ni, nj, k;
bool b = true;
for (k = 0; b && k < 4; k++)
{
ni = i + dir[k][0];
nj = j + dir[k][1];
if (map[ni][nj] >= map[i][j])
b = false;
}
if (b)
{
cnt++;
// printf("i:%d j:%d일 경우에 cnt++\n", i, j);
}
}
}
printf("%d", cnt);
return 0;
}
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <queue>
#include <vector>
using namespace std;
int N;
int *a;
int dir[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; // (y,x)
int main(int argc, char *argv[])
{
scanf("%d", &N);
int i, j, cnt = 0;
int ni, nj, k;
a = new int[(N + 2) * (N + 2)];
for (i = 1; i <= N; i++)
for (j = 1; j <= N; j++)
scanf("%d", a + i * (N + 2) + j);
for (i = 1; i <= N; i++)
{
for (j = 1; j <= N; j++)
{
bool b = true;
for (k = 0; b && k < 4; k++)
{
ni = i + dir[k][0];
nj = j + dir[k][1];
if (*(a + ni * (N + 2) + nj) >= *(a + i*(N + 2) + j))
b = false;
}
if (b)
{
cnt++;
// printf("i:%d j:%d일 경우에 cnt++\n",i,j);
}
}
}
printf("%d", cnt);
free(a);
return 0;
}
P.S.
이것을 디버깅해보면서 느끼는데, Dev-C++이 제가 알던 Visual Studio보다 디버깅하기가 훨씬 힘드네요...ㅠㅠ 원래 그런건가요? 바쁘시겠지만 시간 되실때 디버깅 하는 팁도 영상으로 공유해주시면 도움이 정말 많이 될 것 같아요ㅠㅠ
아 안녕하세요^^ 양질의 강의 제공해주셔서 너무 감사합니다! ㅎㅎ
말씀하신대로 코드블럭으로 좀 보기 편하시게 해놨습니다! 그리고 질문에 말씀드렸지만 디버깅 툴(gdb)를 이용하는게 왜이렇게 어려울까요ㅠㅠ Visual Studio는 BreakPoint만 잘 찍어두면 거의 모든 걸 자동으로 보여줬는데 gdb는 꽤나 수동적으로 느껴지네요ㅠ