광규니
광규니네
광규니
전체 방문자
오늘
어제
  • 분류 전체보기 (154)
    • 알고리즘 (100)
      • 알고리즘 개념 (2)
      • 문제 풀이 (96)
    • 주절주절 (19)
      • 자격증, 활동 후기 (4)
      • 전시회 후기 (3)
      • 이모저모 (2)
      • 회고 (3)
      • 뜨럼 (7)
    • 운영체제 (9)
    • 개발 지식 (9)
      • Apple Watch (4)
      • MySQL (2)
      • Eclipse (1)
      • XCode (1)
    • 네트워크 공부 (1)
    • 데이터베이스 공부 (5)
    • Java 공부 (7)
    • TMP (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 애플워치 앱 만들기
  • 다이나믹 프로그래밍
  • 티스토리챌린지
  • DP
  • 컴퓨터 사이언스
  • 드린이
  • 개념
  • BOJ
  • 애플워치 앱
  • OS
  • 알고리즘
  • BFS
  • 운영체제
  • 백준
  • 파이썬
  • 오블완
  • 합주
  • 자바
  • 프로그래머스
  • 구현

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
광규니

광규니네

알고리즘/문제 풀이

[JAVA/자바 백준 14502] 연구소

2021. 9. 17. 12:53
반응형

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

 

14502번: 연구소

인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크

www.acmicpc.net

풀이

dfs, bfs 문제입니다.

저는 우선 bfs로 풀었습니다.

 

1.

  make_wall 함수를 만들어서

  3개의 벽을 만들어주는 기능(combination)을 구현하구,

2.

 조건을 만족하면 bfs 탐색을 했습니다. 

 

 

--막힌 점

조합을 써야하는건 알았지만 2차원 배열에서 구현하는데 조금 시간어 걸렸습니다.

 

import java.io.*;
import java.util.*;

// bfs문제 
// 벽을 만들 수 있는 갯수는 최대가 3개이므로 3개 디폴트 

public class Main {
	static int n,m;
	static int[][] graph;
	static int[][] check;
	static Queue<int[]> queue=new LinkedList<int[]>();
	static int[] dx= {0,0,1,-1};
	static int[] dy= {1,-1,0,0};
	static int max_val=0;
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st= new StringTokenizer(br.readLine(), " ");
		
		n = Integer.parseInt(st.nextToken());
		m = Integer.parseInt(st.nextToken());
		graph=new int[n][m];
		check=new int[n][m];
		for(int i=0;i<n;i++) {
			st=new StringTokenizer(br.readLine()," ");
			for(int j=0;j<m;j++) {
				graph[i][j]=Integer.parseInt(st.nextToken());
			}
		}
		//2차원 배열에서 combination
		make_wall(0);
		System.out.println(max_val);
	}
	// 3개의 벽을 만들고나면 bfs
	private static void make_wall(int cnt) {
		// TODO Auto-generated method stub
		if(cnt==3) {
			bfs();
			return;
		}
		for(int i=0;i<n;i++) {
			for(int j=0;j<m;j++) {
				if(graph[i][j]==0) {
					graph[i][j]=1;
					make_wall(cnt+1);
					graph[i][j]=0;
				}
			}
		}
	}
	private static void bfs() {
		// TODO Auto-generated method stub
		//임시 최솟값
		int tmp=0;
		
		for(int i=0;i<n;i++) {
			for(int j=0;j<m;j++) {
				//원본 복사 값
				check[i][j]=graph[i][j];
				if(check[i][j]==2) {
					queue.add(new int[] {i,j});
				}
			}
		}
		
		
		while(!queue.isEmpty()) {
			int[] cur=queue.poll();
			
			for(int i=0;i<4;i++) {
				int nx=cur[0]+dx[i];
				int ny=cur[1]+dy[i];
				if(0<=nx && nx<n && 0<=ny && ny<m) {
					if(check[nx][ny]==0) {
						check[nx][ny]=2;
						queue.add(new int[] {nx,ny});
					}
				}
			}
		}
		
		for(int i=0; i<n;i++) {
			for(int j=0;j<m;j++) {
				if(check[i][j]==0) {
					tmp+=1;
				}
			}
		}
		
		max_val=Math.max(max_val, tmp);
		
	}

	

}
반응형
저작자표시

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[JAVA/자바 정올 1681] 해밀턴 순환회로  (0) 2021.09.24
[JAVA/자바 백준 17472] 다리 만들기2  (0) 2021.09.17
[JAVA/자바 SWEA 3124] 최소 스패닝 트리  (0) 2021.09.15
[JAVA/자바 백준 1149] RGB거리  (0) 2021.09.15
[JAVA/자바 10026 백준] 적록색약  (2) 2021.08.25
    '알고리즘/문제 풀이' 카테고리의 다른 글
    • [JAVA/자바 정올 1681] 해밀턴 순환회로
    • [JAVA/자바 백준 17472] 다리 만들기2
    • [JAVA/자바 SWEA 3124] 최소 스패닝 트리
    • [JAVA/자바 백준 1149] RGB거리
    광규니
    광규니
    공부 및 일상 올리기~

    티스토리툴바