티스토리 뷰

생각

주어진 예제는 다음과 같다

빈 칸은 '.'로 짐이 있는 칸은 'X'로 주어진다. 빈 칸이 두칸 이상 연결되어 있으면 누울 곳이 된다. 위의 경우 가로로 누울곳은 5곳 세로로 누울곳은 4곳이 되므로 5 4 를 출력한다.


처음 생각

그대로 조건을 탐색하여 풀이를 하였더니 '틀렸습니다'가 나왔다.


음 생각

짐 칸을 기준으로 새로운 누울곳이 있다면 그곳도 누울곳으로 추가될 수 있었다.

문제에서 좀 더 친절하게 "누울곳은 짐칸으로 구분 될 수 있다" 같은 언급을 해주었으면 좋았을 것 같다.


방안

1) boolean형 flag 변수를 선언하여 '.'이 두개가 연속되어있으면 누울곳으로 판단해 flag를 false로 바꿔준다.('.'이 짐을 만나기 전에 연속해서 있으면 그 자리는 1개로 쳐야하므로)

2) 탐색중 짐을 만나면 flag를 다시 true로 바꿔주어 이후 연속된 '.'를 만나면 개수를 늘려준다.


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import java.io.IOException;
import java.util.Scanner;
 
public class Main{
    public static void main(String[] args) throws IOException{
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] arr = new int[n][n];
        for(int i=0;i<n;i++) {
            String t = sc.next();
            for(int j=0;j<n;j++)
                arr[i][j] = t.charAt(j);
        }        
        solve(n,arr);
        System.out.println(garo+" "+sero);
    }
    
    static int garo,sero;
    private static void solve(int n,int[][] arr) {
        boolean flag = true;
        // 가로 찾기
        for(int i=0;i<n;i++) {
            flag = true;
            for(int j=0;j<n-1;j++) {
                if(arr[i][j]=='.'&&arr[i][j+1]=='.') {
                    if(!flag) continue;
                    garo++;
                    flag = false;
                }
                if(arr[i][j]=='X') flag = true;
            }    
        }
        
        // 세로 찾기
        for(int i=0;i<n;i++) {
            flag = true;
            for(int j=0;j<n-1;j++) {
                if(arr[j][i]=='.'&&arr[j+1][i]=='.') {
                    if(!flag) continue;
                    sero++;
                    flag = false;
                }
                if(arr[j][i]=='X') flag = true;
            }    
        }
    }
}
cs


'알고리즘 > 백준' 카테고리의 다른 글

[백준] 14891번 톱니바퀴  (0) 2018.09.05
[백준] 2294번 동전 2  (0) 2018.09.05
[백준] 2789번 유학 금지  (0) 2018.09.02
[백준] 2455번 지능형 기차  (0) 2018.08.31
[백준] 1260번 DFS와 BFS  (0) 2018.08.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday