헌내기는 친구가 필요해 21736번 [16일차]
시간제한 | 메모리 제한 |
1초 | 1024MB |
문제
2020년에 입학한 헌내기 도연이가 있다. 도연이는 비대면 수업 때문에 학교에 가지 못해 학교에 아는 친구가 없었다. 드디어 대면 수업을 하게 된 도연이는 어서 캠퍼스 내의 사람들과 친해지고 싶다.
도연이가 다니는 대학의 캠퍼스는 N×M 크기이며 캠퍼스에서 이동하는 방법은 벽이 아닌 상하좌우로 이동하는 것이다. 예를 들어, 도연이가 (x, y)에 있다면 이동할 수 있는 곳은 (x+1, y), (x, y+1), (x−1, y), (x, y−1)이다. 단, 캠퍼스의 밖으로 이동할 수는 없다.
불쌍한 도연이를 위하여 캠퍼스에서 도연이가 만날 수 있는 사람의 수를 출력하는 프로그램을 작성해보자.
입력
첫째 줄에는 캠퍼스의 크기를 나타내는 두 정수 N (1≤N≤600), M(1≤M≤600)이 주어진다.
둘째 줄부터 N개의 줄에는 캠퍼스의 정보들이 주어진다. O는 빈 공간, X는 벽, I는 도연이, P는 사람이다. I가 한 번만 주어짐이 보장된다.
출력
첫째 줄에 도연이가 만날 수 있는 사람의 수를 출력한다. 단, 아무도 만나지 못한 경우 TT를 출력한다.
나의코드
package day16;
import java.io.*;
// 헌내기는 친구가 필요해 - 21736번
public class Solution1 {
static int[] dx={1,-1,0,0};
static int[] dy={0,0,1,-1};
static boolean[][] visited;
static int N;
static int M;
static int count;
public static void main(String[] args) throws IOException {
//입력
// 첫번째줄
// N*M = 캠퍼스의 크기
// 상하좌우로 이동 dx, dy 배열지정 - (0,1), (0,-1), (1,0), (-1,0)
// o 빈공간, I 도연, P는 사람, X 벽
// 방문 체크 배열
// count
//기능
// 조건 : 캠퍼스 밖으로 이동할수 없음 : 범위 지정해주기
// I에서 모든곳들 들리면서 P가 있는곳을 다 둘러보기 - 단 X는 지나갈수 없음
// dfs를 이용 - 재귀
//출력
// 도연이가 만날수 있는 사람수출력
// 사람을 못만나면 TT출력
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
N = Integer.parseInt(input[0]);
M = Integer.parseInt(input[1]);
String [][] arr = new String[N][M];
visited = new boolean[N][M];
count = 0;
int x =-1;
int y =-1;
//배열에 담기
for(int i = 0;i<arr.length;i++){
String line = br.readLine();
for(int j = 0;j<arr[0].length;j++) {
String map = String.valueOf(line.charAt(j));
arr[i][j] = map;
if(arr[i][j].equals("I")){
x = i;
y = j;
}else if(arr[i][j].equals("X")){
visited[i][j] = true;
}
}
}
//기능
dfs(x, y, arr);
//출력
if(count ==0){
System.out.println("TT");
}else {
System.out.println(count);
}
}
// dfs를 이용
static void dfs(int x, int y, String [][] arr){
visited[x][y] = true;
//방문확인
if(arr[x][y].equals("P")){
count++;
}
// 상하좌우 탐색
for(int i =0; i < 4; i++){
int nx = x+dx[i];
int ny = y+dy[i];
if(nx >= 0 && ny >=0 && nx < arr.length && ny < arr[0].length && !visited[nx][ny]){
dfs(nx,ny,arr);
}
}
}
}
'Algorithm > 코딩테스트' 카테고리의 다른 글
[코딩테스트] 백준 - 섬의 개수 (0) | 2024.08.04 |
---|---|
[코딩테스트] 백준 - n단 논법 (0) | 2024.08.04 |
[코딩테스트] 백준 - 스피카 (0) | 2024.08.02 |
[코딩테스트] 백준 - 유사 라임 게임 (0) | 2024.08.02 |
[코딩테스트] 백준 - 그녀를 찾아서 (0) | 2024.08.02 |