

-Code
import java.io.*;
import java.util.*;
public class BOJ2508 {
static int rowSize;
static int colSize;
static char[][] candyBox;
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int testCase = Integer.parseInt(br.readLine());
for (int test = 0; test < testCase; test++) {
String line = br.readLine();
// 데이터가 있는 줄이 나올 때까지 무한 반복해서 읽기
while (line == null || line.trim().isEmpty()) {
line = br.readLine();
}
StringTokenizer st = new StringTokenizer(line);
rowSize = Integer.parseInt(st.nextToken());
colSize = Integer.parseInt(st.nextToken());
// 캔디 박스 셋팅
candyBox = new char[rowSize][colSize];
for (int r = 0; r < rowSize; r++) {
String row = br.readLine();
for (int c = 0; c < colSize; c++) {
candyBox[r][c] = row.charAt(c);
}
}
int answer = 0;
for (int r = 0; r < rowSize; r++) {
for (int c = 0; c < colSize; c++) {
// 캔디가 있는 경우 껍질 확인
if (candyBox[r][c] == 'o' && isCandy(r, c)) {
answer++;
}
}
}
System.out.println(answer);
}
br.close();
}
private static boolean isCandy(int r, int c) {
// 가로 검사
if (chackCandy(r, c -1, '>') && chackCandy(r, c + 1, '<') ) {
return true;
}
// 세로 검사
if (chackCandy(r - 1, c, 'v') && chackCandy(r + 1, c, '^') ) {
return true;
}
return false;
}
private static boolean chackCandy(int r, int c, char cover) {
// 범위 확인
if (!isMove(r, c)) {
return false;
}
// 해당 위치에 맞는 껍질인지 확인
return candyBox[r][c] == cover;
}
private static boolean isMove(int r, int c) {
return (0 <= r && r < rowSize) && (0 <= c && c < colSize);
}
}
isCandy에서 for문으로 검사하는 것 때문에 로직이 꼬여서 하나하나 검사했고 추가적으로 빈 라인이 주어지는데 이 부분을 1줄만 주어지는 줄 알고 했으나 찾아보니 while로 입력 값이 존재하는 경우에만 진행되도록 해줘야 했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 5052번 전화번호 목록 (0) | 2026.02.10 |
|---|---|
| [백준/Java] 12981번 공 포장하기 (0) | 2026.02.10 |
| [백준/Java] 2816번 디지털 티비 (0) | 2026.02.09 |
| [백준/Java] 7682번 틱택토 (0) | 2026.02.08 |
| [백준/Java] 4366번 Average Speed (0) | 2026.02.08 |