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

kkim360님의 프로필 이미지
kkim360

작성한 질문수

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

2-A

백준2178 제출 메모리 초과

작성

·

467

0

http://boj.kr/9e4dc18b53ee4679be7d8a7e07c45439

안녕하세요 선생님 수업 잘 듣고있습니다! 다름이 아니라 위의 코드는 제가 쓴코드인데 선생님 코드와 비교해보았을때 거의 90%이상이 일치하며 논리또한 거의 대부분이 일치한다고 느끼는데 제 코드에서 메모리초과가 발생합니다. 도저히 이유를 알 수가 없어서 이렇게 질문 올립니다 . 감사합니다!!

답변 1

0

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

안녕하세요 360님 ㅎㅎ

    queue<pair<int,int>>q;
    q.push({0,0});

이부분이요. visited[0][0]을 걸고 push를 해야겠죠?

 

그리고 이게.. visited 배열을 기반으로 visited배열에 최단거리를 담아서 구현해야 하는데요.

    		if(visited[ny][nx]==1)continue;
    		if(arr[ny][nx] == 0)continue;
    		arr[ny][nx] = arr[y][x]+1;

앞의 코드를 보면 맵을 나타내는 arr라는 배열에다가 최단거리 배열을 담고 있죠? visited 배열을 기반으로 해주세요.

 

 

또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제가 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.

kkim360님의 프로필 이미지
kkim360
질문자

선생님 감사합니다! arr배열이 아니라 꼭 visited배열에 담아야아는 이유가 있을까요?

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

arr는 원본배열입니다. 문제에서 주어지는 맵을 나타내는데요.

보통 어떤 변수을 만들 때 주어지는 의미를 담고 이 의미에 따라 로직이 구성되어야 합니다.

arr는 맵을 나타내고

visited는 최단거리 배열을 나타냅니다.

이러한 역할을 수행하도록 로직을 구축하는 편이 좋기 때문에 최단거리 배열은 visited 배열에다가 담아야 합니다.

kkim360님의 프로필 이미지
kkim360

작성한 질문수

질문하기