01-08 08:57
Recent Posts
Recent Comments
관리 메뉴

miinsun

[Algorithm]μ•Œκ³ λ¦¬μ¦˜ μžλ°”_66 μ„¬λ‚˜λΌ μ•„μΌλžœλ“œ λ³Έλ¬Έ

Algorithm/Java

[Algorithm]μ•Œκ³ λ¦¬μ¦˜ μžλ°”_66 μ„¬λ‚˜λΌ μ•„μΌλžœλ“œ

miinsun 2022. 3. 3. 23:18

πŸ’¬ λ¬Έμ œ μ„€λͺ…

N*N의 μ„¬λ‚˜λΌ μ•„μΌλžœλ“œμ˜ 지도가 격자판의 μ •λ³΄λ‘œ μ£Όμ–΄μ§‘λ‹ˆλ‹€.
각 섬은 1둜 ν‘œμ‹œλ˜μ–΄ μƒν•˜μ’Œμš°μ™€ λŒ€κ°μ„ μœΌλ‘œ μ—°κ²°λ˜μ–΄ 있으며, 0은 λ°”λ‹€μž…λ‹ˆλ‹€.

μ„¬λ‚˜λΌ μ•„μΌλžœλ“œμ— λͺ‡ 개의 섬이 μžˆλŠ”μ§€ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ„Έμš”.

λ§Œμ•½ μ•„λž˜μ™€ κ°™λ‹€λ©΄ μ„¬μ˜ κ°œμˆ˜λŠ” 5κ°œμž…λ‹ˆλ‹€.

 

πŸ”¨ μž…μΆœλ ₯ 예

- μž…λ ₯ 

  • 첫 번째 쀄에 μžμ—°μˆ˜ N(3<=N<=20)이 μ£Όμ–΄μ§‘λ‹ˆλ‹€.
  • 두 번째 쀄뢀터 격자판 정보가 주어진닀.
7
1 1 0 0 0 1 0
0 1 1 0 1 1 0
0 1 0 0 0 0 0
0 0 0 1 0 1 1
1 1 0 1 1 0 0
1 0 0 0 1 0 0
1 0 1 0 1 0 0

 

- 좜λ ₯

  •  μ²« 번째 쀄에 μ„¬μ˜ 개수λ₯Ό 좜λ ₯ν•œλ‹€.
5

 

 

πŸ’» Solution.java

import java.util.*;

public class Main {
	static int answer = 0, n;
    
    // μ•ž λ’€ μ–‘μ˜†, λŒ€κ°μ„ μ˜ μ’Œν‘œ 정보
	static int[] dx = {-1, -1, 0, 1, 1, 1, 0, -1};
	static int[] dy = {0, 1, 1, 1, 0, -1, -1, -1};
	
    // x, y μ’Œν‘œλ₯Ό μ€‘μ‹¬μœΌλ‘œ DFS μ‹œμž‘
	public void DFS(int x, int y, int[][] board) {				
		for(int i = 0; i < 8; i++) {
			int nx = x + dx[i];
			int ny = y + dy[i];
			
            // 경계선 검사 & λ•…(1)인 κ°’ μ°ΎκΈ°
			if(nx >= 0 && ny >= 0 && nx < n && ny < n && board[nx][ny] == 1) {
				board[nx][ny] = 0; //이미 κ²€μ‚¬ν•œ 땅은 0으둜 λ°”κΏ”μ€Œ
				DFS(nx, ny, board);
			}
		}
 	}
	
	public void solution(int[][] board) {
		for(int i = 0; i < n; i++) {
			for(int j = 0; j < n; j++) {
				if(board[i][j] == 1) { // 땅인 지점을 μ€‘μ‹¬μœΌλ‘œ DFS μ‹œμž‘
					answer++; // 맀번 DFSκ°€ μ‹œμž‘ 될 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ 섬
					board[i][j] = 0;
					DFS(i, j, board);
				}
			}
		}
	}
	
	public static void main(String[] args){
		Main main = new Main();
		Scanner sc = new Scanner(System.in);
		
		n = sc.nextInt();
		int [][] board = new int [n][n];
		for(int i = 0; i < n; i++) {
			for(int j = 0; j < n; j++) {
				board[i][j] = sc.nextInt();
			}
		}
		
		main.solution(board);
		
		System.out.println(answer);
		sc.close();
		return ;
	}
}
Comments