백준 2567번: 색종이 - 2 (java)

2021. 8. 22. 03:37Algorithm/백준

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

// 가로 세로 크기가 각각 10인 정사각형 모양의 검은색 색종이를 붙임. 둘레를 구해라.
public class Baekjoon_색종이2 {
	static int N; // 몇 개의 색종이를 붙일건지
	static int[][] map; // 크기 100 이차원 배열
	static int R, C; // 행 열
	static int[] dx = { 0, 0, -1, 1 }; // 상하좌우
	static int[] dy = { -1, 1, 0, 0 }; // 상하좌우
	static int cnt;

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		N = Integer.parseInt(in.readLine());

		map = new int[102][102];

		for (int t = 0; t < N; t++) {
			StringTokenizer st = new StringTokenizer(in.readLine());
			R = Integer.parseInt(st.nextToken());
			C = Integer.parseInt(st.nextToken());

			for (int i = C; i < C + 10; i++) { // 좌표로부터 길이가 10인 정사각형
				for (int j = R; j < R + 10; j++) {
					map[i][j] = 1; // 입력된 정사각형 내부 전부 1로 만듬
				}
			}
		}
		for (int i = 1; i < 102; i++) {
			for (int j = 0; j < 102; j++) {
				if (map[i][j] == 1) {
					for (int d = 0; d < 4; d++) {
						int nx = j + dx[d];
						int ny = i + dy[d];
						
						if(nx >=1 && nx <=100 && ny >= 1 && ny <=100 && map[ny][nx] == 0) {
							cnt++;
						}else if(nx < 1 || nx >=101 || ny < 1 || ny >= 101) {
							cnt++;
						}
					}
				}
			}
		}

		System.out.println(cnt); // 둘레 출력
	}

}
728x90