728x90
반응형
2024.07.05기준 - 실버5
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 영식이가 누울 수 있는 자리를 찾는 문제입니다.
영식이가 누울 수 있는 자리 조건은 똑바로 연속해서 2칸 이상의 빈 칸이 존재하면 그 자리에 누울 수 있습니다.
가로로 누울 수 도 있으며, 세로로 누울 수도 있습니다.
저의 접근 방식은
- 방의 크기와 구조를 입력 받습니다.
- 방을 2차원 배열로 표현했습니다.
- 2중 for문을 사용하여 각 행과 각 열을 검사하여 연속된 빈 칸('.')의 수를 셉니다.
- 연속된 빈 칸의 수가 2 이상이면, 누울 수 있는 자리로 카운트합니다.
- 벽이나 짐을 만나면 카운터 수를 0으로 초기화합니다.
- 최종적으로 가로와 세로로 누울 수 있는 자리를 출력합니다.
코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
char[][] map = new char[n][n];
String str;
int wcount = 0; // 가로로 누울 수 있는 자리의 수를 저장할 변수
int hcount = 0; // 세로로 누울 수 있는 자리의 수를 저장할 변수
for (int i = 0; i < n; i++) {
str = br.readLine();
for (int j = 0; j < n; j++) {
map[i][j] = str.charAt(j);
}
}
for (int i = 0; i < n; i++) {
int wc = 0; // 현재 행에서 연속된 빈 칸의 수를 저장할 변수
int hc = 0; // 현재 열에서 연속된 빈 칸의 수를 저장할 변수
for (int j = 0; j < n; j++) {
if (map[i][j] == '.') {
wc++; // 빈 칸이면 wc를 증가시킵니다.
if (wc == 2) {
wcount++; // 연속된 빈 칸이 2개 이상이면 세로로 누울 수 있는 자리로 카운트합니다.
}
} else {
wc = 0; // 벽이나 짐을 만나면 wc를 초기화합니다.
}
if (map[j][i] == '.') {
hc++; // 빈 칸이면 hc를 증가시킵니다.
if (hc == 2) {
hcount++; // 연속된 빈 칸이 2개 이상이면 세로로 누울 수 있는 자리로 카운트합니다.
}
} else {
hc = 0; // 벽이나 짐을 만나면 hc를 초기화합니다.
}
}
}
sb.append(wcount).append(" ").append(hcount);
System.out.println(sb);
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BEAKJOON / 백준 - JAVA 27112번 시간 외 근무 멈춰! (0) | 2024.07.06 |
---|---|
BEAKJOON / 백준 - JAVA 25327번 다중 항목 선호도 조사 (Large) (0) | 2024.07.05 |
BAEKJOON / 백준 - JAVA 1021번 회전하는 큐 (0) | 2024.07.04 |
BEAKJOON / 백준 - JAVA 14566번 Dongjak N1 (0) | 2024.07.04 |
BEAKJOON / 백준 - JAVA 2052번 지수연산 (2) | 2024.07.03 |