Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- android ar 개발
- 큐 자바 코드
- 2022 플러터 설치
- 안드로이드 유닛 테스트 예시
- rxjava disposable
- 스택 큐 차이
- 플러터 설치 2022
- 클래스
- jvm이란
- 안드로이드 유닛 테스트
- ANR이란
- 2022 플러터 안드로이드 스튜디오
- android retrofit login
- 서비스 쓰레드 차이
- rxjava cold observable
- 안드로이드 라이선스 종류
- ar vr 차이
- 안드로이드 라이선스
- 객체
- 서비스 vs 쓰레드
- 자바 다형성
- rxjava hot observable
- jvm 작동 원리
- 안드로이드 유닛테스트란
- 멤버변수
- 스택 자바 코드
- 안드로이드 os 구조
- Rxjava Observable
- 안드로이드 레트로핏 crud
- 안드로이드 레트로핏 사용법
Archives
- Today
- Total
나만을 위한 블로그
[Algorithm] 프로그래머스 - 안전지대 (Kotlin) 본문
728x90
반응형
지뢰는 2차원 배열 board에 1로 표시돼 있고 board에는 지뢰가 매설된 지역 1, 지뢰가 없는 지역 0만 존재한다. 지뢰가 매설된 지도 board가 매개변수로 주어질 때, 안전한 지역의 칸 수를 리턴하는 solution()을 완성하라
사람들은 이런 문제를 어떻게 푸는 건지 모르겠다. 절망감 1스택과 함께 인터넷의 풀이를 찾아봤다.
프로그래머스 코딩테스트 입문 안전지대 [JAVA] - 22년 10월 1일
velog.io
class Solution {
fun solution(board: Array<IntArray>): Int {
var answer = 0
val boomExplosionRange = 1
val copyBoard = Array(board.size) { IntArray(board[0].size) }
var tempIndex = 0
for (rows in board) {
copyBoard[tempIndex] = rows.copyOf(board[tempIndex].size)
tempIndex++
}
for (i in board.indices) {
for (j in 0 until board[i].size) {
val `val` = board[i][j]
if (`val` == 0) continue
makeBoomArea(i, j, boomExplosionRange, copyBoard)
}
}
for (ints in copyBoard) {
for (anInt in ints) {
if (anInt == 0) answer++
}
}
return answer
}
private fun makeBoomArea(row: Int, col: Int, boomExplosionRange: Int, board: Array<IntArray>) {
for (r in row - boomExplosionRange..row + boomExplosionRange) {
if (r < 0 || r >= board.size) continue
for (c in col - boomExplosionRange..col + boomExplosionRange) {
if (c < 0 || c >= board[0].size) continue
board[r][c] = 1
}
}
}
}
아래는 또 다른 풀이다.
class Solution {
fun solution(board: Array<IntArray>): Int {
var answer = 0
val wrapBoard = Array(board.size + 2) { IntArray(board[0].size + 2) }
for (i in wrapBoard.indices) {
for (j in wrapBoard[i].indices) {
if (i == 0 || j == 0 || i == wrapBoard.size - 1 || j == wrapBoard[0].size - 1) {
wrapBoard[i][j] = 1
}
if (i > 0 && i < wrapBoard.size - 1 && j > 0 && j < wrapBoard[0].size - 1) {
if (board[i - 1][j - 1] == 1) {
wrapBoard[i][j] = 1
wrapBoard[i - 1][j - 1] = 1
wrapBoard[i - 1][j] = 1
wrapBoard[i - 1][j + 1] = 1
wrapBoard[i][j - 1] = 1
wrapBoard[i][j + 1] = 1
wrapBoard[i + 1][j - 1] = 1
wrapBoard[i + 1][j] = 1
wrapBoard[i + 1][j + 1] = 1
}
}
}
}
for (array in wrapBoard) {
for (e in array) {
if (e == 0) {
answer++
}
}
}
return answer
}
}
반응형
'알고리즘 문제 풀이 > 프로그래머스' 카테고리의 다른 글
[Algorithm] 프로그래머스 - 외계어 사전 (Kotlin) (0) | 2023.01.13 |
---|---|
[Algorithm] 프로그래머스 - 삼각형의 완성조건 (2) (Kotlin) (0) | 2023.01.13 |
[Algorithm] 프로그래머스 - 숨어있는 숫자의 덧셈 (2) (Kotlin) (0) | 2023.01.13 |
[Algorithm] 프로그래머스 - 다항식 더하기 (Kotlin) (0) | 2023.01.13 |
[Algorithm] 프로그래머스 - 최댓값 만들기 (2) (Kotlin) (0) | 2023.01.13 |
Comments