Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- lv2
- Queue
- 큐
- 오름차순 정렬
- 자바
- Stack
- 버퍼
- Lv1
- 스택
- 스프링부트 도커 배포
- 프로그래머스 자바
- 알고리즘
- 삼각형의 완성조건
- 문자열
- 프로그래머스 풀이
- 프로그래머스 문자열 정렬
- 클라이언트
- 백준 N과 M 자바
- 프로그래머스
- 이진수 변환
- Programmers
- 백준
- java
- 스프링부트 도커로 배포
- SWEA
- StringTokenizer
- index of
- COS Pro
- lv0
- 스프링부트 도커
Archives
- Today
- Total
mun dev
[백준] 1743 음식물 피하기 자바(Java) 본문
문제설명
코레스코 콘도미니엄 8층은 학생들이 3끼의 식사를 해결하는 공간이다. 그러나 몇몇 비양심적인 학생들의 만행으로 음식물이 통로 중간 중간에 떨어져 있다. 이러한 음식물들은 근처에 있는 것끼리 뭉치게 돼서 큰 음식물 쓰레기가 된다.
이 문제를 출제한 선생님은 개인적으로 이러한 음식물을 실내화에 묻히는 것을 정말 진정으로 싫어한다. 참고로 우리가 구해야 할 답은 이 문제를 낸 조교를 맞추는 것이 아니다.
통로에 떨어진 음식물을 피해가기란 쉬운 일이 아니다. 따라서 선생님은 떨어진 음식물 중에 제일 큰 음식물만은 피해 가려고 한다.
선생님을 도와 제일 큰 음식물의 크기를 구해서 “10ra"를 외치지 않게 도와주자.
입력
첫째 줄에 통로의 세로 길이 N(1 ≤ N ≤ 100)과 가로 길이 M(1 ≤ M ≤ 100) 그리고 음식물 쓰레기의 개수 K(1 ≤ K ≤ N×M)이 주어진다. 그리고 다음 K개의 줄에 음식물이 떨어진 좌표 (r, c)가 주어진다.
좌표 (r, c)의 r은 위에서부터, c는 왼쪽에서부터가 기준이다. 입력으로 주어지는 좌표는 중복되지 않는다.
출력
첫째 줄에 음식물 중 가장 큰 음식물의 크기를 출력하라.
풀이
문제를 보면 음식물이 떨어진 좌표가 있고, 음식물 중 가장 큰 음식물의 크기를 출력하는 것이기 때문에 DFS를 활용하여 풀이했다. 상, 하, 좌, 우로 가면서 연결되어 있는 부분이 있다면 카운트를 증가하고 tmp값과 비교하여 가장 큰 값을 출력했다.
통과한 코드 ✅
import java.util.*;
import java.io.*;
public class Main {
public static int n, m, k;
public static int arr[][];
public static boolean visited[][];
public static int dx[] = {0, 0, 1, -1};
public static int dy[] = {1, -1, 0, 0};
public static int cnt;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
arr = new int[n][m];
visited = new boolean[n][m];
for (int i = 0; i < k; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
arr[x - 1][y - 1] = 1;
}
int tmp = Integer.MIN_VALUE;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (!visited[i][j] && arr[i][j] == 1) {
cnt = 0;
dfs(i, j);
tmp = Math.max(tmp, cnt);
}
}
}
System.out.println(tmp);
}
public static void dfs(int x, int y) {
visited[x][y] = true;
cnt++;
for (int i = 0; i < 4; i++) {
int cx = x + dx[i];
int cy = y + dy[i];
if (cx >= 0 && cy >= 0 && cx < n && cy < m) {
if (!visited[cx][cy] && arr[cx][cy] == 1) {
dfs(cx, cy);
}
}
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 14502 연구소 자바(Java) (1) | 2023.10.23 |
---|---|
[백준] 15654 N과 M(5) 자바(Java) (0) | 2023.10.20 |
[백준] 16953 A → B 자바(Java) (0) | 2023.10.16 |
[백준] 15686 치킨 배달 자바(Java) (1) | 2023.10.16 |
[백준] 7562 나이트의 이동 자바(Java) (0) | 2023.10.12 |