화분

[구름톤 챌린지 9일차]폭탄 구현하기(2) 본문

Study/CODINGTEST

[구름톤 챌린지 9일차]폭탄 구현하기(2)

ExcellEast 2023. 8. 26. 01:05

소개

이번 문제는 N * N 크기의 2차원 배열에 K개의 폭탄이 떨어지면 상하좌우 그리고 가운데에 점수가 올라간다. 특이점은 @인 자리는 2점씩 올라가고 #인 자리는 점수가 안 오른다. 빅오표기법을 사용하면 O(K)여서 시간초과를 걱정해야 하는 문제는 아닌거 같다. 코드는 다음과 같다.

import java.io.*;
class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] NK = br.readLine().split(" ");
		int N = Integer.parseInt(NK[0]);
		int K = Integer.parseInt(NK[1]);
		String[][] board = new String[N][N];
		int[][] result_board = new int[N][N];
		int[] URDL_ROW = {0, -1, 0, 1, 0};
		int[] URDL_COL = {0, 0, 1, 0, -1};
		
		for(int i = 0; i < N; i++){
			board[i] = br.readLine().split(" ");
		}
		
		for(int i = 0; i < K; i++){
			String[] RC = br.readLine().split(" ");
			int board_row = Integer.parseInt(RC[0]) - 1;
			int board_col = Integer.parseInt(RC[1]) - 1;
			
			for(int URDL = 0; URDL < 5; URDL++){
				int point_r = URDL_ROW[URDL] + board_row;
				int point_c = URDL_COL[URDL] + board_col;
				
				if(point_r < 0 || point_r >= N || point_c < 0 || point_c >= N)
					continue;
				
				if(board[point_r][point_c].equals("0"))
					result_board[point_r][point_c] += 1;
				else if(board[point_r][point_c].equals("#"))
					result_board[point_r][point_c] += 0;
				else if(board[point_r][point_c].equals("@")){
					result_board[point_r][point_c] += 2;
				}
			}
			
		}
		
		int max = 0;
		for(int i = 0; i < N; i++){
			for(int j = 0; j < N; j++){
				max = (result_board[i][j] > max) ? result_board[i][j] : max;
			}
		}
		System.out.println(max);
	}
}

어려웠던 점

문제가 제출된지 24시간이 경과하기까지 1,2시간 정도 남았을때 풀기 시작했던 문제인데 1분의 차이로 오류를 수정하지 못해서 24시간 내 풀이를 완료하지 못했다...ㅠㅠ 오류는 문자열을 비교할때 ==을 사용해서 fail이 발생한거 같다. 문자는 equals()로 비교해줘야 하는 경우가 대다수인거 같다.

 

느낀 점

구름톤 챌린지를 진행하면서 이런저런 실수도 많이 하고 그랬는데 그런 과정에서 성장하고 있다고 느끼고 있다. 한편으론 자신감도 조금 오른거 같다.