728x90
반응형
힌트
더보기
- 폭탄 1개에 최대 9개의 안전지대가 사라짐
- 1이 모서리에 위치한다면 4개만 사라짐
- 한쪽면에 맞닿아 있다면 6개만 사라짐
- 폭탄이 인접해 있다면 겹친 만큼 고려해야함
정답
더보기
public static int Solution75(int[,] board)
{
var safeArea = GetNewAreaData(board);
int answer = 0;
for(int i = 0 ; i < board.GetLength(0); i++)
{
for(int j = 0; j < board.GetLength(1); j++)
{
if(safeArea[i,j] != 1)answer++;
}
}
return answer;
}
static int[,] GetNewAreaData(int[,] board){
int[,] safeArea = (int[,])board.Clone();
for (int i = 0; i < board.GetLength(0); i++)
{
for (int j = 0; j < board.GetLength(1); j++)
{
if(board[i, j] == 1)
{
if(i - 1 >= 0)
{
safeArea[i - 1, j] = 1;
if(j - 1 >= 0)
{
safeArea[i - 1, j - 1] = 1;
}
if(j + 1 < board.GetLength(1))
{
safeArea[i - 1, j + 1] = 1;
}
}
if(i + 1 < board.GetLength(0))
{
safeArea[i + 1, j] = 1;
if(j - 1 >= 0)
{
safeArea[i + 1, j - 1] = 1;
}
if(j + 1 < board.GetLength(1))
{
safeArea[i + 1, j + 1] = 1;
}
}
if(j + 1 < board.GetLength(1))
{
safeArea[i, j + 1] = 1;
}
if(j - 1 >= 0){
safeArea[i, j - 1] = 1;
}
}
}
}
return safeArea;
}
해석
더보기
int[,] safeArea = (int[,])board.Clone();
board의 클론을 생성
if(board[i, j] == 1)
폭탄의 위치를 찾아내고
상, 하, 좌, 우, 좌상, 좌하, 우상, 우하를 모두 위험지대 표시(1)로 변경해야한다
if(i - 1 >= 0)
왼쪽 모서리가 아닐 때
if(i + 1 < board.GetLength(0))
오른쪽 모서리가 아닐 때
if(j - 1 >= 0)
위쪽 모서리가 아닐 때
if(j + 1 < board.GetLength(1))
아래쪽 모서리가 아닐 때
해당 항을 1로 변경해준 후 1이 아닌 개수를 세면 안전지대의 개수가 나온다.
728x90
반응형
'C#' 카테고리의 다른 글
[프로그래머스 힌트/답/해석] 연속된 수의 합 (0) | 2024.01.30 |
---|---|
[프로그래머스 힌트/답/해석] 다음에 올 숫자 (0) | 2024.01.30 |
[프로그래머스 힌트/답/해석] 다항식 더하기 (0) | 2024.01.30 |
[프로그래머스 힌트/답/해석] 특이한 정렬 (0) | 2024.01.30 |
[프로그래머스 힌트/답/해석] 문자열 밀기 (0) | 2024.01.30 |