inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

연구소 문제 런타임 에러

256

김지수

작성한 질문수 2

0

안녕하세요,

강의 재미있게 잘 듣고 있습니다 ㅎㅎ

 

http://boj.kr/fe9681a5260641dd90842b66b46cf5ec

 

기본 로직은 같은 것 같아서 크게 코드 위치를 수정을 하지 않았는데, 로컬에서 돌리면 아무 결과 출력이 안되고, 백준에 제출하니 never be null 런타임 에러가 발생하였습니다.

 

어떤 부분이 문제일까요?

 

감사합니다: ) 즐거운 추석되세요

C++ 코테 준비 같이 해요!

답변 2

1

큰돌

ddo님이 잘 설명해주셨는데요.

첨언해서 올립니다. 주석 달았습니다.

#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<stack>
#include<cstring>
#include<tuple>

using namespace std;

int n, m, mm[10][10], visited[10][10], currentCnt, maxCnt=0;
vector<pair<int,int>> emty;

const int dx[4] = {1,0,-1,-0};
const int dy[4] = {0,1,0,-1};
// 1. y, x로 받고 x, y로 하면 헷갈립니다. 해당 부분은 수정하시는게 좋을 것같아요. 이러한 헷갈림은
// 틀린 코드로 이어집니다. 
// 2. nx >= m ???
// 3. memcpy(visited, 0, sizeof(visited)); ???? 
void dfs(int x, int y){
	//왜 여기선 갑자기 x, y? nx가 n을 비교해서 괜찮긴 함 근데..  
	visited[x][y] = 1;
	for(int i=0; i<4; i++){
		int nx = dx[i]+x;
		int ny = dy[i]+y;
		//nx >= m???? 이부분이 문제가 있는 것같아요.  
		if(nx<0||nx>=n||ny<0||nx>=m||visited[nx][ny]||mm[nx][ny]==1) continue;
		if(mm[nx][ny]==0) mm[nx][ny] = 2;
	}
}

void virusTest(){
	for(int i=0; i<n; i++)
		for(int j=0; j<m; j++)
			if(mm[i][j]==2)
				dfs(i,j);
				
	for(int i =0; i<n; i++)
		for(int j=0; j<m; j++)
			if(!visited[i][j]&&mm[i][j]==0) currentCnt++;
}

int main() {
   	ios_base::sync_with_stdio(false);
   	cin.tie(NULL); cout.tie(NULL);
   	cin >> n >> m;
   	
   	//입력은 y, x로  
	for(int i=0; i<n; i++)
		for(int j=0; j<m; j++){
			cin >> mm[i][j];	
			if(mm[i][j]==0) emty.push_back({i,j});
		}
	cout<<emty.size()<<endl;
	int size = emty.size();
	for(int i=0; i<size; i++)
		for(int j=i+1; j<size; j++)
			for(int k=j+1; k<size; k++){
				//initialization
				// ???? 
				currentCnt = 0;
				memcpy(visited, 0, sizeof(visited));
				
				//make temporal wall
				mm[emty[i].first][emty[i].second] = 1;
				mm[emty[j].first][emty[j].second] = 1;
				mm[emty[k].first][emty[k].second] = 1;
				
				//and test the effect
				virusTest();
				maxCnt = max(maxCnt, currentCnt);
				
				//turn it back to normal
				mm[emty[i].first][emty[i].second] = 0;
				mm[emty[j].first][emty[j].second] = 0;
				mm[emty[k].first][emty[k].second] = 0;
			}
	
	cout<<maxCnt;
	return 0;
}

 

감사합니다.

0

김지수

감사합니다 ㅠㅠㅠ 많은 도움이 되었습니다!!!!

1

창신동 장첸

도움 드릴려고 코드를 제 컴퓨터에서도 돌려봤는데 48라인 앞과 뒤에 군데군데 cout을 찍어봤지만 출력이 안되고 terminated with exit code: 1 로 종료되더라고요.

(입출력씽크 코드를 제거하니 cout 코드가 보여집니다)

보니까 55번라인에서 memcpy는 똑같은 모양의 배열을 복사할 때 사용하는 상황에서 써야하는데 그렇지 않기 떄문에 오류가 발생한 것 같습니다.

memset으로 memset(visited, 0, sizeof(visited)); 고쳐주시면 잘 흘러가네요

터미널 실행결과에 에러위치를 알려주지 않으니 찾는데 오래걸렸습니다

그치만 다음부터 이런 상황이 오면 함수를 제대로 사용했는지 살펴볼 수 있는 계기가 된것같네요ㅎㅎ

1-E질문입니다!

0

533

2

3-L 틀린 부분 피드백 부탁드립니다.

0

835

2

1-A문제 순열재귀함수 질문입니다.

0

396

1

1-A 일곱난쟁이문제입니다

0

470

1

문제 풀 때 방향성에 대해

0

810

1

맥에서 vs code로 실행 관련 질문입니다

0

530

1

17071번 메모리 초과

0

390

1

1-C질문입니다!

0

428

2

2-B BFS 시간초과질문

0

638

2

1-O 13번 라인

0

447

1

6-J 놀이공원 문제 질문

0

389

1

구현관련 질문

0

491

1

강의 교안

0

322

1

실력을 더 올리고나서 강의를 보는 것이 맞을까요?

0

550

1

안녕하세요! 재귀함수에 관해서 질문드립니다

0

540

1

1-K

0

481

2

3-G번 질문있습니다.

1

480

3

3-C 실행 시간 질문드립니다.

0

503

1

4-A 문제 풀이 질문있습니다.

0

601

2

비트마스킹 연산자 "1의 보수" 영문 표기법

0

441

1

격자탐색 문제에서 BFS 시간복잡도 질문드립니다.

0

349

1

3-O go 함수 질문 드립니다.

1

453

2

4-A 출력 질문

0

308

1

1주차 1-O 질문드립니다

0

266

1