문제
https://www.acmicpc.net/problem/9082
문제 개요
지뢰찾기 게임은 2×N 배열에 숨겨져 있는 지뢰를 찾는 게임입니다. 배열의 첫 번째 줄에는 각 블록 주위에 있는 지뢰의 개수를 나타내는 숫자가, 두 번째 줄에는 지뢰가 숨겨져 있는 위치를 나타내는 *와 숨겨진 블록을 나타내는 #이 있습니다. 주어진 배열에서 지뢰의 총 개수를 찾는 문제입니다.
접근 방법
단순 최댓값을 구하는 문제이기 때문에 정확한 위치는 배제하고 생각해 보았습니다.
초기 값 설정: 입력받은 힌트 배열을 사용하여 지뢰의 개수를 계산합니다.
지뢰 찾기 로직:
- 배열의 각 요소를 순회하며, 주변 블록의 힌트를 확인합니다.
- 지뢰가 있을 수 있는 위치에서 힌트 값을 감소시키며 지뢰의 개수를 세어갑니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine()); // 테스트 케이스 수
for (int t = 0; t < T; t++) {
int N = Integer.parseInt(br.readLine()); // 배열 크기
int[] hint = makeHint(br.readLine().split("")); // 숫자 배열 생성
String map = br.readLine();
int mineCount = find(hint); // 지뢰 찾기
System.out.println(mineCount); // 결과 출력
}
}
private static int find(int[] hint) {
int answer = 0;
// 각 지점에 대해 반복
for (int i = 0; i < hint.length; i++) {
// 첫 번째 칸의 경우
if (i == 0) {
// 현재 칸과 다음 칸이 모두 지뢰 후보인 경우
if (hint[i] != 0 && hint[i + 1] != 0) {
hint[i]--; // 현재 칸 감소
hint[i + 1]--; // 다음 칸 감소
answer++; // 지뢰 카운트 증가
}
// 마지막 칸의 경우
} else if (i == hint.length - 1) {
// 현재 칸과 이전 칸이 모두 지뢰 후보인 경우
if (hint[i - 1] != 0 && hint[i] != 0) {
hint[i]--; // 현재 칸 감소
hint[i - 1]--; // 이전 칸 감소
answer++; // 지뢰 카운트 증가
}
// 중간 칸의 경우
} else {
// 좌, 우 모두 지뢰 후보인 경우
if (hint[i - 1] != 0 && hint[i] != 0 && hint[i + 1] != 0) {
hint[i - 1]--; // 왼쪽 칸 감소
hint[i]--; // 현재 칸 감소
hint[i + 1]--; // 오른쪽 칸 감소
answer++; // 지뢰 카운트 증가
}
}
}
return answer;
}
private static int[] makeHint(String[] arr) {
int[] hint = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
hint[i] = Integer.parseInt(arr[i]); // 문자열을 정수로 변환
}
return hint.clone(); // 배열 복사 후 반환
}
}
'문제 > 백준' 카테고리의 다른 글
[백준] 7682 틱택토 - Java (0) | 2024.10.25 |
---|---|
[백준] 3190 뱀 - Java (1) | 2024.10.24 |
[백준] 1094 막대기 - Java (0) | 2024.10.23 |
[백준] 1018 체스판 다시 칠하기 - Java (0) | 2024.10.23 |
[백준] 12919 A와 B 2 - Java (1) | 2024.09.22 |