HS_development_log

백준 2799번 - 블라인드 / Java 본문

Algorithm-백준/문자열처리

백준 2799번 - 블라인드 / Java

DevHyeonseong 2020. 1. 17. 17:03
반응형

문제

https://www.acmicpc.net/problem/2799

 

2799번: 블라인드

문제 봄이 오고 있다. 해는 높이 떠서 환하게 빛나고 있다. 사람들은 햇볕을 가리기 위해 블라인드를 내린다. 상근이는 이웃들이 무엇을 하는지를 염탐하고, 이것에 대해서 뒷담화를 하는 주부이다. 올해는 건너편 아파트에 사는 사람들이 블라인드를 얼마나 내리는지를 조사하려고 한다.  모든 창문은 4*4 그리드로 나타낼 수 있고, *를 이용해서 블라인드를 나타낸다. 상근이가 볼 수 있는 창문은 다음 5가지 상태 중 하나이다. 건너편 아파트의 한 층에는 N개의 창

www.acmicpc.net

 

알고리즘

  1. * 나 . 가 포함된 문자열만 배열에 저장한다

  2. 창문을 세로로 1줄만 검사해도 블라인드의 종류를 알수있으므로 첫번째 세로줄에대한 정보만 저장한다

  3. 세로1줄이 모두 입력되면 블라인드의 종류를 검사하고 다음층 창문을 검사한다

 

소스코드

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
48
49
50
51
52
53
54
55
56
57
58
59
/*
 * BOJ2799
 * 2020.01.17
 * Hyeonseong
 */
import java.util.*;
public class BOJ2799 {
    public static void main(String[] args) {
        Solution s = new Solution();
    }
}
class Solution{
    public Solution() {
        Scanner scan = new Scanner(System.in);
        int m = scan.nextInt();
        int n = scan.nextInt();
        scan.nextLine();
        String[] window = new String[n+1];
        int idx = 0;
        for(int i=0;i<window.length;i++) {
            window[i] = "";
        }
        int[] answer = new int[5];
        for(int i=0;i<m*5+1;i++) {
            String str = scan.nextLine();
            if(str.contains("*"|| str.contains(".")) {
                for(int j=1;j<5*n+1;j+=5) { // 세로1줄만 뽑아내는 작업
                    window[idx]+=str.charAt(j);
                    idx++;
                }
                idx -=n; // 1줄이끝나면 다시 처음인덱스로 돌아가 다시 세로1줄에대한 정보를 얻는다
            }
            else {
                for(int j=0;j<window.length;j++) {
                    if(window[j].equals("....")) {
                        answer[0]++;
                    }
                    else if(window[j].equals("*...")) {
                        answer[1]++;
                    }
                    else if(window[j].equals("**..")) {
                        answer[2]++;
                    }
                    else if(window[j].equals("***.")) {
                        answer[3]++;
                    }
                    else if(window[j].equals("****")){
                        answer[4]++;
                    }
                    window[j] = ""// 검사가끝나면 재사용을 위해 초기화
                }
                idx = 0;
            }
        }
        for(int i : answer) {
            System.out.print(i+" ");
        }
    }
}
cs

 

반응형