플라즈밍
플라즈마 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] 오답노트

그래프 탐색시 가로,세로 실수 - 백준 알고리즘 오답노트 1012

2019. 4. 13. 18:23
반응형

 

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

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. (

www.acmicpc.net

오류 복기

1. 가로와 연관된 변수 
즉, xy을 바꿔서 dfs돌렸음.. 


FB1.


가로 크기 = M
i = 0 ~ M까지 돌릴때
가로가 왔다 갔다 하는건 x 가 커졌다 작아졌다 하는 것.
graph [x][y]의 x 움직임

M - i - x ( 연관된 변수 적어두기)

int m;
int m_i;
int m_i_x;
이것도 하나의 방법

 

FB1. 다시 복기

 

1. 가로의 크기를 입력 받아 반복문을 돌릴 때 x관련 변수인데 y에 해당하는 변수로 생각함.

 

- 가로의 크기를 M으로 입력받음

- for i -> M까지 돌리면 

i변수는 가로의 크기만큼 반복되므로 2차원 좌표평면으로 볼 때 x의 좌표가 커진다고 볼 수 있다.

즉,

M - i - x 이렇게 연결돼 있다고 본다.

 

 

 

#2. 2차원 형태 graph 
 다음 노드로 갈 때 check list


1. 범위 벗어났는가?
2. graph[x][y] == 1 // 갈 수 있는 노드?
3. check[x][y] == false // 처음 방문 노드?

 

//1012
#include<cstdio>
#include<cstring>
int dx[4] ={0,0,1,-1};
int dy[4] ={1,-1,0,0};
using namespace std;
int graph[51][51];
bool check[51][51];
int m,n,k;
void dfs(int x,int y){
	check[x][y] = true;
	for( int i = 0; i < 4; i++){
		int nx = x + dx[i]; int ny = y + dy[i];
		//범위 체크
		if(nx >= 0 && nx < m && ny >= 0 && ny < n){
			if(graph[nx][ny] == 1 && check[nx][ny] == false){
				dfs(nx,ny);
			}			
		}
	}
}
int main(){
	int cases; scanf("%d",&cases);
	while(cases--){
		memset(graph,0,sizeof(graph));
		memset(check,0,sizeof(check));
		
// 가로길이 세로길이 배추가 심어진 곳 -> 1;
		scanf("%d %d %d",&m,&n,&k);
		for(int i = 0 ; i< k; i++){
			int x,y; scanf("%d %d",&x,&y);
			graph[x][y] = 1;
		}
		
		int result = 0;
		for(int i = 0; i<n; i++){
			for(int j =0 ; j<m; j++){
				if(graph[j][i] == 1 && check[j][i] == false){
					dfs(j,i); result++;
				}
			}
		}
		printf("%d\n",result);
	}
}
/*
FB1. 2차원 형태 graph
 다음 노드로 갈때 check list
1. 범위 벗어났는가?
2. graph[x][y] == 1	// 갈 수 있는 노드?
3. check[x][y] == false // 처음 방문 노드?
FB2. 가로와 연관된 변수 , 즉, xy을 바꿔서 dfs돌렸음..
가로 크기 = M
i = 0 ~ M까지 돌릴때
가로가 왔다 갔다 하는건 x 가 커졌다 작아졌다 하는것.
graph[x][y] 의 x 움직임
M - i - x ( 연관된 변수 적어두기)
int m;
int m_i;
int m_i_x;
이것도 하나의 방법
*/

 

 

 

 

 

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

 

https://plasmacodeing.tistory.com/

 

 

 

 

 

반응형
저작자표시 (새창열림)

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

알고리즘 문제풀이전에 할것. 자료구조 선택하기 - 백준 알고리즘 오답노트 1012  (0) 2019.05.06
별 찍기 5 - 백준 알고리즘 오답노트 2442  (0) 2019.05.06
C++ 무한루프 탈출 break continue - 백준 알고리즘 오답노트 10845  (0) 2019.03.02
C 반복for while 문 탈출 break냐 return - 백준 알고리즘 9012  (0) 2019.03.02
C scanf의 리턴값 무한루프 - 백준 알고리즘 오답노트 11721  (0) 2019.03.02
    '알고리즘/백준[BOJ] 오답노트' 카테고리의 다른 글
    • 알고리즘 문제풀이전에 할것. 자료구조 선택하기 - 백준 알고리즘 오답노트 1012
    • 별 찍기 5 - 백준 알고리즘 오답노트 2442
    • C++ 무한루프 탈출 break continue - 백준 알고리즘 오답노트 10845
    • C 반복for while 문 탈출 break냐 return - 백준 알고리즘 9012
    플라즈밍
    플라즈밍
    퀀트 주식투자 자산배분 데이터분석 정보 공유 프로그래밍,투자 주제의 책 강의 리뷰 노하우 전수

    티스토리툴바