ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 3495. 아스키 도형
    PS/Java 2022. 3. 31.

    창영이는 메모장에 '.', '\', '/'을 이용해서 도형을 그렸다. 각 문자는 그림에서 1*1크기의 단위 정사각형을 나타낸다.

    '.'은 빈 칸을 나타내며, '/'는 정사각형의 왼쪽 아래 꼭짓점과 오른쪽 위 꼭짓점이 연결된 선분을, '\'은 왼쪽 위 꼭짓점과 오른쪽 아래 꼭짓점이 연결된 선분을 나타낸다.

    창영이가 그린 도형의 넓이를 출력하는 프로그램을 작성하시오.


    입력

    첫째 줄에 h와 w가 주어진다. h는 그림의 높이, w는 너비이다. (2 ≤ h,w ≤ 100)

    다음 h개 줄에는 창영이가 메모장에 그린 다각형이 주어진다. 

    창영이가 그린 다각형은 1개이고, 변과 변이 서로 교차하는 경우는 없고, 자기 자신과 접하는 경우도 없다.

    출력

    첫째 줄에 다각형의 넓이를 출력한다.


    예제 입력 1

    4 4
    /\/\
    \../
    .\.\
    ..\/

    예제 출력 1

    8

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.util.StringTokenizer;
    
    public class Main {
        public static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        public static int H, W;
        public static char[][] arr;
        public static void main(String[] args) throws Exception {
            StringTokenizer st = new StringTokenizer(br.readLine());
            H = Integer.parseInt(st.nextToken());
            W = Integer.parseInt(st.nextToken());
            arr = new char[H][W];
            int startIdx = -1;
            int endIdx = -1;
            for(int i = 0; i < H; i++) {
                arr[i] = br.readLine().toCharArray();
                for(int j = 0; j < W; j++) {
                    if((arr[i][j] == '\\' || arr[i][j] == '/') && startIdx < 0) {
                        startIdx = j;
                    } else if((arr[i][j] == '\\' || arr[i][j] == '/') && startIdx >= 0) {
                        endIdx = j;
                    }
                    if(startIdx >= 0 && endIdx >= 0) {
                        for(int k = startIdx + 1; k < endIdx; k++) {
                            arr[i][k] = '-';
                        }
                        startIdx = -1;
                        endIdx = -1;
                    }
                }
            }
            double sum = 0;
            for(char[] c : arr) {
                for(char k : c) {
                    if(k == '\\' || k == '/') {
                        sum += 0.5;
                    } else if(k == '-') {
                        sum += 1;
                    }
                }
            }
            bw.write(Integer.toString((int)sum));
            br.close();
            bw.flush();
            bw.close();
        }
    }

    시작 인덱스, 끝 인덱스를 찾아 그 사이를 -로 채운다.

     

    슬래시 모양이 있을 땐 0.5, -가 있을땐 1로 계산을 한다.

    'PS > Java' 카테고리의 다른 글

    [백준] 2573. 빙산  (0) 2022.03.31
    [백준] 11758. CCW  (0) 2022.03.31
    [백준] 15649. N과 M (1)  (0) 2022.03.31
    [백준] 5430. AC  (0) 2022.03.31
    [백준] 3109. 빵집  (0) 2022.03.31

    댓글

Designed by Tistory.