-
[백준] 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