[BOJ 2563] 색종이
업데이트:
문제
- BOJ 2563
- 문제의 저작권은 Baekjoon Online Judge에 있습니다.
접근방식
색종이의 넓이를 담아줄 2차원 배열 map을 만들어서 꼭지점 좌표가 입력될 때 마다 이를 기준으로 만들어진 넓이 부분의 좌표를 true로 표시해준다. 이때 가로 세로길이는 항상 10이므로 시작 꼭지점을 기준으로 0~9까지 더해서 다음 꼭지점을 구해주었다. 10을 포함시키지 않는 이유는 10을 넣게 되면 전체 길이가 11이 되므로 빼주었다. map에 표시를 할 때 Ans를 하나 증가시켰고, 겹친 부분이 발생하지 않기 위해서 이미 표시된 좌표라면 Ans를 증가하지 않도록 하였다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine()); //색종이의 수
boolean[][] map = new boolean[101][101];
StringTokenizer st;
int Ans = 0; //넓이
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine());
//시작 꼭지점
int startX = Integer.parseInt(st.nextToken());
int startY = Integer.parseInt(st.nextToken());
//하나씩 올라가면서 색종이 부분 배열에 true표시
for(int x=0; x<10; x++) {
for(int y=0; y<10; y++) {
if(map[startX + x][startY + y]) continue;
map[startX + x][startY + y] = true;
Ans++;
}
}
}
//넓이 검색
bw.write(Ans+"");
bw.flush();
bw.close();
br.close();
}
}