
내가 생각했을때 문제에서 원하는부분
첫째 줄에 방 바닥의 세로 크기N과 가로 크기 M이 주어진다.
둘째 줄부터 N개의 줄에 M개의 문자가 주어진다.
이것은 바닥 장식 모양이고, '-‘와 ’|‘로만 이루어져 있다.
N과 M은 50 이하인 자연수이다.
첫째 줄에 문제의 정답을 출력한다.
내가 이 문제를 보고 생각해본 부분
BufferedReader를 통해 입력을 빠르게 받는다.
먼저 입력을 읽어 방의 세로 크기 N, 가로 크기 M을 저장한다.
그 다음 N줄을 읽으면서 2차원 char 배열 floor에 저장해 방 바닥 모양을 나타내도록 했다.
count 변수로 필요한 판자 개수를 센다.
가로 방향 검사:
각 행(가로줄)을 순회하면서 현재 문자가 '-' 인 경우를 확인한다.
이때, 현재 위치가 첫 열이거나 바로 왼쪽 문자가 '-'가 아니라면, 즉 연속된 판자의 시작점이므로 카운트를 증가한다.
연속된 '-'는 하나의 판자가 되기 때문이다.
세로 방향 검사:
각 열을 순회하면서 현재 문자가 '|' 인 경우를 본다.
현재 행이 맨 위이거나 바로 위 문자가 '|'가 아니라면 새 판자 시작으로 카운트를 증가한다.
마지막에 count는 가로 방향으로 필요한 판자 수와 세로 방향으로 필요한 판자 수의 합이 된다.
출력 후 종료한다.
마지막에 리소스 누수를 막기 위해 br.close()로 스트림을 닫는다.
코드로 구현
package baekjoon.baekjoon_33;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 1388번 문제
public class Main1305 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] size = br.readLine().split(" ");
int N = Integer.parseInt(size[0]);
int M = Integer.parseInt(size[1]);
char[][] floor = new char[N][M];
for (int i = 0; i < N; i++) {
floor[i] = br.readLine().toCharArray();
}
int count = 0;
// 가로 방향 '-' 판자 세기
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (floor[i][j] == '-') {
// 현재 칸이 '-'이고, 맨 왼쪽이거나 바로 왼쪽이 '-'가 아니면 새 판자 시작
if (j == 0 || floor[i][j - 1] != '-') {
count++;
}
}
}
}
// 세로 방향 '|' 판자 세기
for (int j = 0; j < M; j++) {
for (int i = 0; i < N; i++) {
if (floor[i][j] == '|') {
// 현재 칸이 '|'이고, 맨 위거나 바로 위가 '|'가 아니면 새 판자 시작
if (i == 0 || floor[i - 1][j] != '|') {
count++;
}
}
}
}
System.out.println(count);
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.