플라즈밍
플라즈마 IT
플라즈밍
  • All (163)
    • MindSet (2)
    • Wisdom (8)
    • Book (18)
    • [Web] (6)
      • [Web]Guide (2)
      • [Web]HTML-CSS-JS (1)
      • [Web]ReactJS (0)
      • [Web]NextJS (1)
    • 퀀트주식투자 (4)
      • [리포트]포트폴리오 (4)
    • 자산배분전략 (2)
      • [리포트]자산배분전략 (1)
    • 포트폴리오 (0)
      • 발걸음 (0)
    • 개발 Note (3)
    • TipNote (5)
    • 알고리즘 (27)
      • 백준[BOJ] 오답노트 (27)
      • 백준[BOJ] 강의 정리 노트 (0)
    • etc-posts (18)
      • Unity :: C# 튜토리얼 (18)
    • Web&Know (23)
    • 끄적임 (4)
    • 세상이슈 (0)
    • Youtube 유튜브 (3)
      • Youtube 채널소개 (3)
    • 창업 Know&Idea (1)
    • Web&Dev (4)
    • 프로젝트 (6)
      • Unity5 Project (3)
      • UnrealEngine4 Project (2)
      • Web Page (1)
    • 주가차트-기술적분석 (2)
    • BlockChain (7)
    • SystemDesign (11)

인기 글

최근 글

hELLO · Designed By 정상우.
플라즈밍

플라즈마 IT

알고리즘/백준[BOJ] 오답노트

구름IDE 디버깅 하는 방법 - 백준 알고리즘 오답노트 1913

2019. 5. 7. 10:25
반응형

https://www.acmicpc.net/problem/1913

 

1913번: 달팽이

N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 출력한다.

www.acmicpc.net

#구름IDE에서 디버깅 하는 방법

 

IDE 환경에서 처음 디버깅을 배운건 VS 사용했을때  중단점 설정 후 코드를 한줄 한줄 실행 시키는 것.

함수를 들어갈지 말지도 선택하면서 코드 한줄한줄 읽었던것 같다. 그리고 변수의 메모리 주소를 알아내어 실시간 RAM의 상태를 보면서 들어가 있는 변수들을 보았다.

 

이후 구름IDE 로 옮기면서 디버깅 기능을 사용 안하고 그냥 확신이 부족한 부분에서 출력을 찍어 봤는데,

출력 찍는데만 해도 길어지는 코드가 있어서 디버깅 방법을 익히게 되었다.

 

간단한 디버깅 방법



#1. cout 출력을 이용해서 중간 중간 변수를 확인한다.

 

C++에서는 cout, C에서는 printf 등등 확인하고 싶은 변수를 중간중간 넣어주면 가능.

 

 

 


#2. 반복문에서 일시정지하기. 그리고 변수 확인하기 

 


만약 반복문에서 출력을 확인하고 싶은데, 반복문이 워낙 빠르게 진행되다보면 출력되는 데이터가 우르르 나오게 되어 디버깅을 할 수가 없다. 

그럴때는

아무런 입력을 cin을 받아 반복문을 일시정지 해본다.
    eg) int k; cin>k; // 변수 k는 그냥 버리는 거임.

 

 

 

 


#3. 디버깅 툴을 이용해서 변수 추적하기

 

 


디버깅 계속 : 다음 중단점 이동
스탭인 : 한줄 한줄 , 호출되는 함수가 있으면 들어감
스탭아웃 : 아 이제 이 함수는 그만... 선택된 스택이 리턴될때까지 실행
스탭 오버 : 한줄 한줄 , 함수는 건뛰

 

 

//1913

#include<iostream>

using namespace std;

int map[1000][1000];
int dx[4] = {-1,0,1,0};
int dy[4] = {0,1,0,-1};
int n;

bool isInRange(int x,int y){
	if(x<= 0 || y <= 0 || x > n || y > n){
		return false;
	}
	if(map[x][y] != 0){
		return false;
	}
	return true;
	
}

int main(){
	int goal; cin>>n>>goal;
	
	int x,y; int dir; int cur = 1;
	int interval = 2;
	int ansx,ansy;
	
	
	x = (n+1) / 2; y = (n+1) /2 ; // start x,y
	map[x][y] = cur++; dir = 0;
	
	while(true)
	{
		
		//해당 방향 만큼 이동 (만약 끝점이라면 종료)
		int end = interval / 2 ;
		for(int i = 1; i <= end ; i++ ){
			
			int nx = x + dx[dir];
			int ny = y + dy[dir];
			if(!isInRange(nx,ny)){break;}
			map[nx][ny] = cur++;
			x =nx; y = ny;
		if(map[x][y] == goal){ansx = x; ansy= y;}
		}
		
		//방향전환
		dir = (dir + 1) % 4;
		//간격 조정
		interval++;
		if(x == 1 && y == 1){ break;}
	//7	int k; cin>>k; //FB1. 반복문 일시정지하기.
	}
	for(int i = 1; i <= n ;i++){
		for(int j = 1 ; j <=n ; j++){
			cout<<map[i][j]<<" ";
		}
		cout<<"\n";
	}
	cout<<ansx<<" "<<ansy<<"\n";
	
	return 0;	
}

/*
FB1. 디버깅 하는 방법

1. cout 출력을 이용해서 중간 중간 변수를 확인한다.

2. 반복문 일시정지하기.

만약 반복문에서 출력을 확인하고 싶은데, 출력양이 많다면
   아무런 입력을 cin을 받아 반복문을 일시정지 해본다.
   
3. 디버깅 툴을 이용해서 변수 추적하기
	디버깅 계속 : 다음 중단점 이동
	스탭인 : 한줄 한줄 , 호출되는 함수가 있으면 들어감
	스탭아웃 : 아 이제 이 함수는 그만... 선택된 스택이 리턴될때까지 실행
	스탭 오버 : 한줄 한줄 , 함수는 건뛰

*/

 

 

 

 

 

 

 

 

 

 

 

 

플라즈마 IT 블로그 - 코딩 공부 정리, IT 정보 공유

 

https://plasmacodeing.tistory.com/

 

조금이라도 도움이 되었다면 공감 및 댓글 주세요~~

 

 

 

반응형
저작자표시

'알고리즘 > 백준[BOJ] 오답노트' 카테고리의 다른 글

C++ 배열 인덱스 1부터 사용 하기 - 백준 알고리즘 오답노트 2011  (0) 2019.05.07
C++ 소수점 반올림 안됨. fixed가 고장났을때 - 백준 알고리즘 오답노트 2755  (0) 2019.05.07
알고리즘 고수의 코드를 보다. - 백준 알고리즘 오답노트 5073  (0) 2019.05.07
다이나믹 프로그래밍 오버플로어 - 백준 알고리즘 오답노트 1012  (0) 2019.05.07
배열 초기화 방법 fill vs memset - 백준 알고리즘 오답노트 1260  (0) 2019.05.06
    '알고리즘/백준[BOJ] 오답노트' 카테고리의 다른 글
    • C++ 배열 인덱스 1부터 사용 하기 - 백준 알고리즘 오답노트 2011
    • C++ 소수점 반올림 안됨. fixed가 고장났을때 - 백준 알고리즘 오답노트 2755
    • 알고리즘 고수의 코드를 보다. - 백준 알고리즘 오답노트 5073
    • 다이나믹 프로그래밍 오버플로어 - 백준 알고리즘 오답노트 1012
    플라즈밍
    플라즈밍
    퀀트 주식투자 자산배분 데이터분석 정보 공유 프로그래밍,투자 주제의 책 강의 리뷰 노하우 전수

    티스토리툴바