250x250
Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
Tags
- 막내의막무가내 SQL
- 막내의막무가내 rxjava
- 부스트코스에이스
- 안드로이드
- 막내의막무가내 목표 및 회고
- 안드로이드 Sunflower 스터디
- 프로그래머스 알고리즘
- 막내의막무가내 안드로이드 에러 해결
- 프래그먼트
- 막내의막무가내 플러터
- Fragment
- 막내의막무가내 안드로이드 코틀린
- 막무가내
- 막내의막무가내 안드로이드
- 막내의막무가내 프로그래밍
- flutter network call
- 막내의 막무가내 알고리즘
- 안드로이드 sunflower
- 막내의막무가내 알고리즘
- 주엽역 생활맥주
- 막내의막무가내
- 막내의막무가내 코틀린 안드로이드
- 주택가 잠실새내
- 막내의막무가내 일상
- 막내의막무가내 코볼 COBOL
- 막내의 막무가내
- 2022년 6월 일상
- 막내의막무가내 코틀린
- 부스트코스
- 막내의막무가내 플러터 flutter
Archives
- Today
- Total
막내의 막무가내 프로그래밍 & 일상
[알고리즘] 백준 2589 보물섬 -BFS, 브루트포스- 자바 코틀린 본문
728x90
백준 2589 보물섬 문제를 풀어봤습니다. ㅎㅎ
백준 브루트포스 유형에서 한 문제를 골라풀었는데 BFS 기본 문제였습니다.
땅끼리 거리가 가장 큰 곳이 보물이 숨어있는 땅이므로 땅인 곳을 모두 BFS 탐색돌려서 가장 먼 경로를 출력하면됩니다.
코틀린의 coerceAtLeast() 라는 함수를 알 수 있던 문제였습니다.
자바에서는 최대값 = Math.Max( 최댓값, 숫자2 ) 이렇게 최댓값을 갱신하지만
코틀린에서는 Int 의 확장함수인 coreceAtLeast()를 사용하여 최댓값.corceAtLeast(숫자2) 로 가능해집니다.
/**
* Ensures that this value is not less than the specified [minimumValue].
*
* @return this value if it's greater than or equal to the [minimumValue] or the [minimumValue] otherwise.
*
* @sample samples.comparisons.ComparableOps.coerceAtLeast
*/
public fun Int.coerceAtLeast(minimumValue: Int): Int {
return if (this < minimumValue) minimumValue else this
}
풀이는 다음과 같습니다.
[Java]
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class Main {
private static int R; // 행
private static int C; // 열
private static int[] dr = new int[]{-1, 0, 1, 0};
private static int[] dc = new int[]{0, -1, 0, 1};
private static int[][] map; // 맵
private static boolean[][] isVisited; // 방문여부
private static int answer = -1;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
R = sc.nextInt();
C = sc.nextInt();
map = new int[R][C];
for (int i = 0; i < R; i++) {
String str = sc.next();
for (int j = 0; j < str.length(); j++) {
map[i][j] = str.charAt(j);
}
}
for (int i = 0; i < R; i++) {
for (int j = 0; j < C; j++) {
isVisited = new boolean[R][C];
if (map[i][j] == 'L') {
bfs(i, j);
}
}
}
System.out.println(answer);
}
private static void bfs(int r, int c) {
Queue<Point> queue = new LinkedList<>();
queue.offer(new Point(r, c, 0));
isVisited[r][c] = true;
while (!queue.isEmpty()) {
Point point = queue.poll();
for (int i = 0; i < 4; i++) {
int r2 = point.r + dr[i];
int c2 = point.c + dc[i];
if (0 <= r2 && r2 < R && 0 <= c2 && c2 < C && map[r2][c2] == 'L' && !isVisited[r2][c2]) {
isVisited[r2][c2] = true;
queue.offer(new Point(r2, c2, point.cnt + 1));
answer = Math.max(answer, point.cnt + 1);
}
}
}
}
private static class Point {
int r;
int c;
int cnt; // 걸린시간
public Point(int r, int c, int cnt) {
this.r = r;
this.c = c;
this.cnt = cnt;
}
}
}
[Kotlin]
import java.util.*
private var R // 행
= 0
private var C // 열
= 0
private val dr = intArrayOf(-1, 0, 1, 0)
private val dc = intArrayOf(0, -1, 0, 1)
private lateinit var map // 맵
: Array<CharArray>
private lateinit var isVisited // 방문여부
: Array<BooleanArray>
private var answer = -1
fun main(args: Array<String>) {
val sc = Scanner(System.`in`)
R = sc.nextInt()
C = sc.nextInt()
map = Array(R) { CharArray(C) }
for (i in 0 until R) {
val str = sc.next()
for (j in str.indices) {
map[i][j] = str[j]
}
}
for (i in 0 until R) {
for (j in 0 until C) {
isVisited = Array(R) { BooleanArray(C) }
if (map[i][j] == 'L') {
bfs(i, j)
}
}
}
println(answer)
}
private fun bfs(r: Int, c: Int) {
val queue: Queue<Point> = LinkedList()
queue.offer(Point(r, c, 0))
isVisited[r][c] = true
while (!queue.isEmpty()) {
val point = queue.poll()
for (i in 0..3) {
val r2 = point.r + dr[i]
val c2 = point.c + dc[i]
if (r2 in 0 until R && 0 <= c2 && c2 < C && map[r2][c2] == 'L' && !isVisited[r2][c2]) {
isVisited[r2][c2] = true
queue.offer(Point(r2, c2, point.cnt + 1))
answer = answer.coerceAtLeast(point.cnt + 1)
}
}
}
}
data class Point(var r: Int, var c: Int, var cnt: Int)
728x90
'알고리즘 > DFS, BFS, 시뮬, 백트래킹' 카테고리의 다른 글
[알고리즘] 프로그래머스 게임 맵 최단거리 (찾아라 프로그래밍 마에스터) -BFS- 자바 (0) | 2021.04.18 |
---|---|
[알고리즘] 백준 2665 미로만들기 -BFS, 다익스트라, 최단경로- 자바 (0) | 2021.04.12 |
[알고리즘] 백준 15663 N과 M (9) -백트랙킹- 자바 코틀린 (0) | 2021.04.05 |
[알고리즘] 기출문제 -dfs, 백트랙킹- (0) | 2021.03.23 |
[알고리즘] 백준 1182 부분수열의 합 -백트랙킹, 그리디- 자바 (0) | 2021.03.22 |
Comments