[BOJ] 1303: 전쟁 - 전투 (JAVA)

2024. 4. 23. 03:54·코테/Algorithm
728x90
 

1303번: 전쟁 - 전투

첫째 줄에는 전쟁터의 가로 크기 N, 세로 크기 M(1 ≤ N, M ≤ 100)이 주어진다. 그 다음 두 번째 줄에서 M+1번째 줄에는 각각 (X, Y)에 있는 병사들의 옷색이 띄어쓰기 없이 주어진다. 모든 자리에는

www.acmicpc.net

 

풀이

 

DFS로 덩어리를 저장해주며 탐색해주었다.

index out이 한번 발생했는데, 가로와 세로를 잘 확인하자 ~!

 

전체코드
package 백준renew;

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

public class 실버1_1303_전쟁전투 {
	static int N, M, sum;
	static int whiteSoldier = 0;
	static int blueSoldier = 0;
	static boolean visited[][];
	static char map[][];
	static int goX[] = {-1, 1, 0, 0};
	static int goY[] = {0, 0, -1, 1};
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		StringBuilder sb = new StringBuilder();
		
		StringTokenizer st = new StringTokenizer(br.readLine());
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		
		map = new char[M][N];
		visited = new boolean[M][N];
		
		for(int i=0; i<M; i++) {
			String tmp = br.readLine();
			map[i] = tmp.toCharArray();
		}
		
		for(int i=0; i<M; i++) {
			for(int j=0; j<N; j++) {
				if(map[i][j]=='W' && !visited[i][j]) {
					sum = 1;
					Check(i, j, 'W');
					whiteSoldier += (sum*sum);
				}
				
				if(map[i][j]=='B' && !visited[i][j]) {
					sum = 1;
					Check(i, j, 'B');
					blueSoldier += (sum*sum);
				}
			}
		}
		
		sb.append(whiteSoldier).append(" ").append(blueSoldier);
		bw.write(sb.toString());
		bw.close();
	}
	static void Check(int x, int y, char color) {
		visited[x][y] = true;
		
		for(int i=0; i<4; i++) {
			int newX = x + goX[i];
			int newY = y + goY[i];
			
			if(newX < 0 || newX >=M || newY < 0 || newY >=N || visited[newX][newY] || map[newX][newY]!=color) {
				continue;
			}
			
			sum++;
			Check(newX, newY, color);
		}
	}
}
728x90

'코테 > Algorithm' 카테고리의 다른 글

[Programmers] 잡은 물고기 중 가장 큰 물고기의 길이 구하기 (MySQL)  (0) 2024.05.01
[BOJ] 1051: 숫자 정사각형 (JAVA)  (0) 2024.04.24
[BOJ] 15650: N과 M(2) (JAVA)  (0) 2024.04.21
[BOJ] 1431: 시리얼 번호 (JAVA)  (0) 2024.04.21
[BOJ] 17390: 이건 꼭 풀어야 해! (JAVA)  (1) 2024.04.19
'코테/Algorithm' 카테고리의 다른 글
  • [Programmers] 잡은 물고기 중 가장 큰 물고기의 길이 구하기 (MySQL)
  • [BOJ] 1051: 숫자 정사각형 (JAVA)
  • [BOJ] 15650: N과 M(2) (JAVA)
  • [BOJ] 1431: 시리얼 번호 (JAVA)
DROPDEW
DROPDEW
💻 Developer | 기록하지 않으면 존재하지 않는다
  • DROPDEW
    제 2장 1막
    DROPDEW
  • 전체
    오늘
    어제
    • categories (401)
      • App/Android (1)
      • BE (36)
        • HTTP 웹 기본 지식 (8)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (12)
        • 스프링부트와 JPA 활용 (3)
        • 스프링부트 시큐리티 & JWT (0)
        • PHP (6)
      • FE·Client (23)
        • HTML (1)
        • React (19)
        • Unity (1)
      • Data (12)
        • AI (4)
        • Bigdata (6)
        • Database (1)
        • 빅데이터분석기사 (0)
      • Infra (0)
      • CS (7)
        • CS 면접 준비 (3)
      • 취준 (13)
        • 자격증·인턴·교육 (4)
        • 인적성·NCS (6)
        • 코테·필기·면접 후기 (3)
      • 코테 (268)
        • Algorithm (220)
        • SQL (35)
        • 정리 (13)
      • 인사이트 (27)
        • 금융경제뉴스 (7)
        • 금융용어·지식 (2)
        • 북마크 (7)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    구현
    자료구조
    투포인터
    시뮬레이션
    백준
    이분탐색
    그래프탐색
    수학
    오블완
    매개변수탐색
    티스토리챌린지
    최단경로
    정렬
    문자열
    다이나믹프로그래밍
    브루트포스 알고리즘
    그리디알고리즘
    누적합
    너비우선탐색
    그래프이론
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
DROPDEW
[BOJ] 1303: 전쟁 - 전투 (JAVA)
상단으로

티스토리툴바