728x90
https://level.goorm.io/exam/195691/%ED%8F%AD%ED%83%84-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-2/quiz/1
728x90
내 생각
폭탄이 떨어진 자리와 상하좌우 좌표에 대해서 0, @, #인지에 따라 폭탄값이 1, 2 증가 또는 증가하지 않는지 조건만 잘 구현해 주면 된다.
import java.io.*;
import java.util.*;
class Main {
static int N;
static char[][] map;
static int[][] resultMap;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
// N, K 입력
st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
// 땅 상태 입력
map = new char[N][N];
for(int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for(int j = 0; j < N; j++) {
map[i][j] = st.nextToken().charAt(0);
}
}
// 폭탄 떨어트리기
int[] dx = {-1, 1, 0, 0};
int[] dy = {0, 0, -1, 1};
resultMap = new int[N][N];
for(int i = 0; i < K; i++) {
// x, y값 입력
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken()) - 1;
int y = Integer.parseInt(st.nextToken()) - 1;
// (x, y) 좌표와 상하좌우 폭탄값 반영
changeMap(x, y);
for(int j = 0; j < 4; j++) {
int nx = x + dx[j];
int ny = y + dy[j];
changeMap(nx, ny);
}
}
// 최대값 구하기
int result = 0;
for(int j = 0; j < N; j++) {
for(int k = 0; k < N; k++) {
result = result > resultMap[j][k] ? result : resultMap[j][k];
}
}
System.out.println(result);
}
public static void changeMap(int x, int y) {
// 범위 체크
if(x < 0 || x >= N || y < 0 || y >= N) return;
// 범위 안이라면 폭탄 값 반영
if(map[x][y] == '0') { // 폭탄 값 1 증가
resultMap[x][y]++;
} else if(map[x][y] == '@') {
resultMap[x][y] += 2;
}
}
}
728x90
'Problem Solving > goorm' 카테고리의 다른 글
[구름톤 챌린지 3주 차 학습 일기] 11일차 미션 문제 11. 통증 (2) (java) (0) | 2023.08.28 |
---|---|
[구름톤 챌린지 2주 차 학습 일기] 10일차 미션 문제 10. GameJam (java) (0) | 2023.08.28 |
[구름톤 챌린지 2주 차 학습 일기] 8일차 미션 문제 8. 통증 (java) (0) | 2023.08.23 |
[구름톤 챌린지 2주 차 학습 일기] 7일차 미션 문제 7. 구름 찾기 깃발 (java) (0) | 2023.08.22 |
[구름톤 챌린지 2주 차 학습 일기] 6일차 미션 문제 6. 문자열 나누기 (java) (0) | 2023.08.21 |