inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

[47번 봉우리] 무엇때문에 안되는 걸까요?

237

조랑말

작성한 질문수 3

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보다 디버깅하기가 훨씬 힘드네요...ㅠㅠ 원래 그런건가요? 바쁘시겠지만 시간 되실때 디버깅 하는 팁도 영상으로 공유해주시면 도움이 정말 많이 될 것 같아요ㅠㅠ

c++ 코딩-테스트

답변 2

0

김태원

안녕하세요^^

2번 테스트케이스에서 정답이 91개인데 오답코드는 90개를 출력합니다.

정답코드로 2번 케이스의 91개 봉우리의 행과 열 좌표를 출력해서 기록해 놓은 다음 오답코드를 2번 케이스의 봉우리 행과 열 좌표를 출력해서 어디가 빠졌는지 확인해 보시는게 제일 좋을 것 같습니다.

0

김태원

안녕하세요^^

어떤 문제인가요? 그리고 코드를 코드블럭 버튼을 이용해 들여쓰기를 해주시면 제가 보기 편합니다.

0

조랑말

아 안녕하세요^^ 양질의 강의 제공해주셔서 너무 감사합니다! ㅎㅎ

말씀하신대로 코드블럭으로 좀 보기 편하시게 해놨습니다! 그리고 질문에 말씀드렸지만 디버깅 툴(gdb)를 이용하는게 왜이렇게 어려울까요ㅠㅠ Visual Studio는 BreakPoint만 잘 찍어두면 거의 모든 걸 자동으로 보여줬는데 gdb는 꽤나 수동적으로 느껴지네요ㅠ

87번 채점 프로그램에 오류가 있는 것 같습니다.

0

90

2

그리디 파트

0

115

2

안녕하세요. 선생님(54번 코드 관련 문의)

0

141

2

테스트 파일 exit_coe_1, time_limit_exceeded 질문

0

143

1

C언어로 코드를 짜면 채점 시에 한 문제 빼고 시간 초과가 발생하는데 해결하는 방법이 있을까요?

0

172

1

19번 질문있습니다

0

123

1

6번 관련 채점오류입니다

0

88

2

22번 문제는 C로 풀어주신 건가요 C++로 풀어주신 건가요?

0

166

2

dev C++ 콘솔창 바로 닫힘

0

245

1

최신화하기

0

171

1

채점이 안되요...

1

261

1

안녕하세요 강사님 정렬에 대해서 설명이 조금 더 듣고 싶습니다.

0

113

1

45번 공주구하기 문제를 list를 이용해서 이렇게 풀어도 될까요?

0

155

1

39번 두 배열 합치기 문제 채점 오류인가 코드 오류인가

0

155

0

채점기에서 틀렸다고 나오는데 이유를 모르겠습니다.

0

150

2

해당 강의에서 C언어로만 진행하는 강의 문의 건

0

145

2

87번 문제 섬나라 아일랜드 질문

0

128

1

16번 문제에서 직접 답을 대입하면 정답이 나오는데 채점에서 wrong answer가 나옵니다.

0

149

1

40번 교집합 문제

0

166

1

43번 뮤직비디오 문제 테스트케이스 4번을 만족 못합니다.

0

170

1

41. 연속된 자연수의 합 문제 질문있습니다.

0

166

1

질문있습니다.

0

193

2

시간초과가 나요

0

172

1

43번 문제 3 ~ 5번에 문제가 있는것 같습니다.

0

249

1