-
카테고리
-
세부 분야
알고리즘 · 자료구조
-
해결 여부
미해결
[47번 봉우리] 무엇때문에 안되는 걸까요?
23.07.29 02:41 작성 23.07.29 14:44 수정 조회수 118
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보다 디버깅하기가 훨씬 힘드네요...ㅠㅠ 원래 그런건가요? 바쁘시겠지만 시간 되실때 디버깅 하는 팁도 영상으로 공유해주시면 도움이 정말 많이 될 것 같아요ㅠㅠ
답변을 작성해보세요.
0
김태원
지식공유자2023.07.29
안녕하세요^^
2번 테스트케이스에서 정답이 91개인데 오답코드는 90개를 출력합니다.
정답코드로 2번 케이스의 91개 봉우리의 행과 열 좌표를 출력해서 기록해 놓은 다음 오답코드를 2번 케이스의 봉우리 행과 열 좌표를 출력해서 어디가 빠졌는지 확인해 보시는게 제일 좋을 것 같습니다.
답변 2