PS(Java)/백준

[PS] 백준 1388번 바닥 장식

UL :) 2022. 7. 6. 03:21

문제

 

1388번: 바닥 장식

형택이는 건축가이다. 지금 막 형택이는 형택이의 남자 친구 기훈이의 집을 막 완성시켰다. 형택이는 기훈이 방의 바닥 장식을 디자인했고, 이제 몇 개의 나무 판자가 필요한지 궁금해졌다. 나

www.acmicpc.net

풀이

세로길이 n, 가로길이 m 인 방에 다음 두 가지 판자를 깐다. (n,m<=50)

- : 인접해 있고 같은 행에 있다면
| : 인접해 있고 같은 열에 있다면


위 조건을 충족할 경우 두 개는 같은 나무 판자로 친다.
방 바닥을 장식하는데 필요한 나무 판자의 총 개수를 구해야 한다.

 

2차원 배열에 나무판자 문자열을 넣고, 탐색하면서 카운트하면 된다.

내 식대로 푼다고 시간이 쫌 걸려서 ㅎㅎ... (또르르) 뿌듯하긴한데... 왜 난 머리회전이 빠르게 안될까..

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
	
	public static void main(String[] args) throws IOException{

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		int n = Integer.parseInt(st.nextToken()); //세로
		int m = Integer.parseInt(st.nextToken()); //가로
		char tile[][] = new char[n][m];
		
		//2개 이상일 경우 1로 count
		int count = 0; //타일 총 개수
		
		for(int i=0; i<n; i++) {
			tile[i] = br.readLine().toCharArray(); //타일 배열 초기화
			int c = 0;
			
			for(int j=0; j<m; j++) {
				
				if(tile[i][j] == '-') {
					if(c==0) count++;						
					c++; //- 연속 개수 셈
				}else {
					c = 0; //- 연속 초기화
				}
			}
		}

		//가로 세로 바꿔서 본다(세로로 쭉 볼 것임)
		for(int i=0; i<m; i++) {
			int c = 0;
			
			for(int j=0; j<n; j++) {
				if(tile[j][i] == '|') {
					if(c==0) count++;
					c++; //| 연속 개수 셈
				}else { 
					c = 0; //| 연속 초기화
				}
			}
		}
		
		System.out.println(count);
		
	}
}