글
프로그래머스 레벨0 안전지대(C#, JAVA) try catch(Exception e)
public class Solution {
public int solution(int[][] param) {
int safeZone = 0;
// 위험지역 Set
for (int i = 0; i < param.length; i++)
{
for (int j = 0; j < param.length; j++)
{
if (param[i][j] == 1)
setArea(param, i, j);
}
}
// 안전지역 Count
for (int i = 0; i < param.length; i++)
{
for (int j = 0; j < param.length; j++)
{
if (param[i][j] == 0)
safeZone++;
}
}
return safeZone;
}
void setArea(int[][] param, int x, int y) {
for (int i = -1; i < 2; i++)
{
for (int j = -1; j < 2; j++)
{
try
{
if (param[x + i][y + j] == 0)
param[x + i][y + j] = 2;
}
catch (Exception e)
{
}
}
}
}
}
public class Solution {
int[][] d = {{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 0}, {0, 1}, {1, -1}, {1, 0}, {1, 1}};
public int solution(int[][] board) {
int n = board.length;
boolean[][] unable = new boolean[n][n];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (board[i][j] == 1)
{
for (int[] k: d)
{
int nearX = i + k[0];
int nearY = j + k[1];
if (nearX >= 0 && nearX < n && nearY >= 0 && nearY < n)
{
unable[nearX][nearY] = true;
}
}
}
}
}
int unableCount = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (unable[i][j])
{
unableCount++;
}
}
}
return n * n - unableCount;
}
}
////////////////////////
public class Solution {
public int solution(int[,] board) {
int answer = 0;
int length = board.GetLength(0);
int[] x = new int[8]{-1, 1, 0, 0, -1, -1, 1, 1};
int[] y = new int[8]{0, 0, -1, 1, -1, 1, -1, 1};
int[,] temp = new int[length,length];
int nx = 0;
int ny = 0;
for(int i = 0; i < length; i++)
{
for(int j = 0; j < length; j++)
{
if(board[i,j] == 1)
{
temp[i,j] = 1;
for(int k = 0; k < 8; k++)
{
nx = i + x[k];
ny = j + y[k];
if(nx >= 0 && nx < length && ny >= 0 && ny < length)
{
temp[nx,ny] = 1;
}
}
}
}
}
for(int i = 0; i < length; i++)
{
for(int j = 0; j < length; j++)
{
if(temp[i,j] != 1)
{
answer++;
}
}
}
return answer;
}
}
////////////////////////
C#
using System;
public class Solution {
public int solution(int[,] board) {
int safeZone = 0;
// 위험지역 Set
for (int i = 0; i < board.GetLength(0); i++)
{
for (int j = 0; j < board.GetLength(1); j++)
{
if (board[i,j] == 1)
setArea(board, i, j);
}
}
// 안전지역 Count
for (int i = 0; i < board.GetLength(0); i++)
{
for (int j = 0; j < board.GetLength(1); j++)
{
if (board[i,j] == 0)
safeZone++;
}
}
return safeZone;
}
void setArea(int[,] board, int x, int y) {
for (int i = -1; i < 2; i++)
{
for (int j = -1; j < 2; j++)
{
try
{
if (board[x + i,y + j] == 0)
board[x + i,y + j] = 2;
}
catch (Exception e)
{
}
}
}
}
}
//// try catch(Exception e)를 활용해서 어레이의 범위를 벗어나는 경우를 빠져나오게 하는 방식이다.
/// 그리고 폭탄의 영향 범위 지역을 2로 세팅해서 safezone의 숫자를 계산할 수 있도록 설정했다.
'프로그래밍' 카테고리의 다른 글
프로그래머스 문자열 내의 p와 y의 개수(JAVA, toLowerCase().split(""), equals) (0) | 2023.02.11 |
---|---|
프로그래머스 JAVA 폰켓몬 (0) | 2023.02.09 |
다항식 더하기 JAVA (0) | 2023.02.09 |
프로그래머스 레벨2 C# 주차 요금 계산(array.where) (0) | 2023.02.07 |
프로그래머스 C# 푸드 파이트 대회(for문, 문자열 합하기, P, J) (0) | 2023.02.06 |