-
Java 20125 쿠키의 신체 측정PS 2023. 7. 19. 14:31
https://www.acmicpc.net/problem/20125
20125번: 쿠키의 신체 측정
쿠키런은 데브시스터즈에서 제작한 모바일 러닝 액션 게임이다. 마녀의 오븐에서 탈출한 쿠키들과 함께 모험을 떠나는 게임으로, 점프와 슬라이드 2가지 버튼만으로 손쉽게 플레이할 수 있는
www.acmicpc.net
풀이 :
1. 쿠키의 머리를 찾은 뒤 머리의 바로 한칸 아래가 심장이므로 hX, hY 변수에 심장에 위치를 업데이트한다.
2. 쿠키의 왼팔, 오른팔, 허리 순으로 dfs 탐색을 진행하여 길이를 구해준다. 허리의 경우에 허리의 끝 양쪽에 다리가 있으므로 해당 좌표를 static 변수에 업데이트 해준다.
3. bX, bY 변수는 허리의 끝 지점이다. 양쪽 다리에 대해서 dfs 탐색을 진행하여 양다리의 길이를 구한다.
위의 로직대로 문제를 해결하였습니다.
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main { static int[] dx = {0, 0, 1}; static int[] dy = {-1, 1, 0}; static int[][] map; static int n, bX, bY; static boolean check = false; static StringBuilder sb = new StringBuilder(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); n = Integer.parseInt(br.readLine()); map = new int[n][n]; boolean findHead = false; int hX = 0; int hY = 0; for (int i = 0; i < n; i++) { String str = br.readLine(); for (int j = 0; j < n; j++) { if (str.charAt(j) == '*') { map[i][j] = 1; if (!findHead) { hX = i + 1; hY = j; findHead = true; } } else { map[i][j] = 0; } } } sb.append(hX+1).append(" ").append(hY+1).append("\n"); for (int i = 0; i < 3; i++) { dfs(hX+dx[i], hY+dy[i], 0, i); } dfs(bX+1, bY-1, 1, 2); dfs(bX+1, bY+1, 1, 2); System.out.println(sb); } static void dfs(int x, int y, int cnt, int dir) { if (x < 0 || y < 0 || x >= n || y >= n || map[x][y] != 1) { sb.append(cnt).append(" "); if(dir == 2 && !check){ bX = x; bY = y; check = true; } return; } else { dfs(x + dx[dir], y + dy[dir], cnt + 1, dir); } } }
'PS' 카테고리의 다른 글
Java 1138 한 줄로 서기 (0) 2023.07.21 Java 1244 스위치 켜고 끄기 (0) 2023.07.19 Java 25757 임스와 함께하는 미니게임 (0) 2023.07.19 Java 1389 케빈 베이컨의 6단계 법칙 (0) 2023.07.05 Java 14891 톱니바퀴 (0) 2023.06.30