-
BOJ) 누울 자리를 찾아라알고리즘/백준 2020. 8. 26. 15:46반응형
누울 자리를 찾아라
풀이
세로와 가로를 직접 검증하는 메소드 두 개를 만들어서 쉽게 풀었다.
하지만, 기준점이 되는 좌표를 정하는 메소드로 만들었으면, 코드를 더 줄이고 중복을 줄일 수 있었을텐데 아쉽다.
확실히 문제 풀 때는 거기까지 생각하기는 힘든 것 같다.
아무튼, 내가 푼 방법은 가로와 세로 좌표를 각각 순차적으로 돌면서 다음 좌표가 빈칸인지 확인하며, 빈칸일 때까지 쭉 이어나가는? 방법이다. map에 직접 하는게 편하겠지만, 가로와 세로 각각 탐색해야하기 때문에 map을 건드릴 수 없었고, deep clone을 하는 것 보다는 visit을 만드는게 더 효율적이라고 생각했다.
가로에서는 x를 우선적으로 확인하고, 세로는 y를 우선적으로 확인했다는 점과 기준 축에서 계속해서 다음 좌표가 비어있는지 확인했다는 점 두 개 말고는 특이사항은 없다.
코드
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { final static char EMPTY ='.'; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); char[][] map = new char[n+1][n+1]; for(int i=0; i<n; i++) { char[] charArr = br.readLine().toCharArray(); for(int j=0; j<n; j++) map[i][j] = charArr[j]; } br.close(); solution(n, map); } private static void solution(int n, char[][] map) { StringBuffer sb = new StringBuffer(); sb.append(getHorizontal(n, map)).append(" "); sb.append(getVertical(n, map)); System.out.println(sb.toString()); } private static int getVertical(int n, char[][] map) { boolean[][] visit = new boolean[n+1][n+1]; int answer =0; for(int x=0; x<n; x++) { for(int y=0; y<n; y++) { if(map[y][x] == EMPTY && !visit[y][x]) { visit[y][x] = true; int nextY = y + 1; while (map[nextY][x] == EMPTY) { visit[nextY][x] = true; nextY++; } if(visit[y+1][x]) answer++; } } } return answer; } private static int getHorizontal(int n, char[][] map) { boolean[][] visit = new boolean[n+1][n+1]; int answer =0; for(int y=0; y<n; y++) { for(int x=0; x<n; x++) { if(map[y][x] == EMPTY && !visit[y][x]) { visit[y][x] = true; int nextX = x + 1; while (map[y][nextX] == EMPTY) { visit[y][nextX] = true; nextX++; } if(visit[y][x+1]) answer++; } } } return answer; } private static class Pos { int x,y; public Pos(int x, int y) { this.x =x; this.y =y; } } }
반응형'알고리즘 > 백준' 카테고리의 다른 글
BOJ) 토너먼트 (0) 2020.08.27 BOJ) 점프 (0) 2020.08.27 BOJ) 섬의 개수 (0) 2020.08.26 BOJ) 수 찾기 (0) 2020.08.26 BOJ) 가장 큰 정사각형 (0) 2020.08.26