inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

2-S

bfs로도 한번 풀어봤는데 메모리 초과가 뜹니다! 혹시 이유를 알 수 있을까요?

716

정윤교

작성한 질문수 9

0

http://boj.kr/de8945ab75c34aa8a4034d0ebe22fc4f

문제를 bfs로도 한번 풀어 보았습니다! 예제는 정확하게 정답이 나왔습니다.

전역변수로 선생님과 같은 배열들의 크기를 잡았는데 제출시 메모리초과가 뜨는 이유는 bfs안에 queue를 만들어서 그런것일까요??

추가로 시간복잡도는 주어진 문제의 변수에 범위를 보고 내가 쓸 로직과 비교하여 이 로직이 될지 안될지 판단이 어느정도 가능해 졌는데, 문제에서 제공한 제한된 공간복잡도를 만족하는지에 대한 판단은 어떻게 해야 될까요?

c++ 코딩-테스트

답변 2

0

정윤교

자세한 설명과 답변 감사합니다!!! 덕분에 막혔던 부분을 빠르게 해결할 수 있었습니다 ㅎㅎ 아 혹시 강의 내용 중 나온 선생님의 정답코드를 영상으로 말고 텍스트로 확인할 수 있는 방법이 있을까요??

0

큰돌

알고리즘 해설 교안으로 모두 제공드리고 있습니다.

image

이부분 다운 받아주세요. ㅎㅎ

 

0

큰돌

안녕하세요 윤교님 ㅎㅎ

	while (q.size()) {
		int nextNode = q.front(); q.pop();
		for (auto i : computer[nextNode]) {
			if (visited[i] == 1)continue;
			q.push(i);

이 부분은 q.push를 할 때 visit가 안들어가져 있습니다. 즉, 방문한 정점은 다시 방문할 수도 있다는 것입니다.

BFS를 할 때 방문한 정점은 다시 방문하지 않도록 방문처리를 해주는 것이 중요합니다.

 

int dfs(int here) {  
	visited[here] = 1;
	int ret = 1; 
	for(int there : v[here]){
		if(visited[there]) continue;
		ret += dfs(there); 
	} 
	return ret;
}

이코드를 보시면 dfs가 재귀적으로 일어나면서

dfs -> visited처리 -> dfs -> visited처리

...

가 반복적으로 일어납니다.

 

이렇게 방문처리를 해주시는게 중요한데요.

이처리를 안해주면 방문한 정점도 다시한번 계속 방문 -> 무한루프

에 빠질 수가 있고 이를 통해 메모리초과가 발생할 수도 있습니다.

 

전역변수로 선생님과 같은 배열들의 크기를 잡았는데 제출시 메모리초과가 뜨는 이유는 bfs안에 queue를 만들어서 그런것일까요??

>> 보통은 전역변수로 하는게 좋고 그런 이유로 초과가 뜨기도 합니다. 다만 이코드는 그 부분 말고 다른 부분이 문제였던 것 같습니다.

 

추가로 시간복잡도는 주어진 문제의 변수에 범위를 보고 내가 쓸 로직과 비교하여 이 로직이 될지 안될지 판단이 어느정도 가능해 졌는데, 문제에서 제공한 제한된 공간복잡도를 만족하는지에 대한 판단은 어떻게 해야 될까요?
>> 보통은 배열 기준으로 1000만 미만은 된다고 보시면 됩니다. 다만 문제마다 다를 수 있으니 이것은 참고삼아 이렇구나 하고 진행하셔야 합니다.

어떤 문제는 1억짜리도 되기도 합니다.




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

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

감사합니다.

강사 큰돌 올림.

코딩 살구 클럽 컴파일 에러

0

2

1

추천 문제

0

4

1

코딩살구클럽 승인

0

7

1

코살구 1주차 1940번 문제 조건과 프라이빗 테스트 불일치 문의

0

20

2

문제를 고민하는 시간 관련

0

25

2

코딩살구클럽

0

38

2

코딩살구클럽 문의

0

36

2

코딩살구클럽 승인

0

35

2

DP 경우의 수 설명이 이해가 되지 않습니다.

0

33

2

3-F 채점 관련 질문

0

31

1

BFS, DFS 활용이 되는 상황에서의 방향성

0

33

2

코딩살구클럽 승인

0

44

2

코딩살구클럽승인

0

39

3

코딩살구클럽 승인

0

54

2

3-D 관련 질문

0

35

2

코살구 회원가입 문의

0

45

2

코살구 로그인 문제

0

65

2

3-A 문제 풀이 관련 질문

0

56

3

2-O 질문 있습니다

0

38

2

2-T 문제에 관한 질문

0

40

2

코딩 살구 클럽 접속 및 사용방법 문의

0

63

2

안녕하세요~. 현재 코살코딩클럽 사이트가 접속이 안됩니다~

0

67

2

코딩살구클럽 로그인문제

0

85

3

코딩 살구 클럽 로그인 문제

0

86

2