2563번 문제
문제
입력
첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다.
색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고,
두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다.
색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다.
출력
첫째 줄에 색종이들이 붙은 검은 영역의 넓이를 출력한다.
🗝️포인트
- 결과를 나타낼때, 공식을 사용하지 말고 생각하자(컴퓨터 처럼 단순 무식하게)
- 1번 과 같은 생각이면, 여기 100 X 100의 도화지는 10,000개의 점을 담은 판이라고 생각하고 좌표부터 10 X 10개의 흑점을 찍는다고 생각하자.
- 흰 / 검 -> false / true 요렇게 2개의 값으로 생각해볼 수 있다.
- 몇번 겹치든 검은색으로 칠해진 점의 갯수만 새면 된다.
- 단순 배열이 아닌 2차원 배열이라는 것을 명심할 것!! (x,y) 좌표!
제출 답안
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()), xst_point=0, yst_point=0, area=0;
StringTokenizer st;
boolean[][] arr = new boolean[101][101];
for(int i=0; i < N; i++){
st = new StringTokenizer(br.readLine()," ");
xst_point = Integer.parseInt(st.nextToken());
yst_point = Integer.parseInt(st.nextToken());
for(int j=0; j<10; j++){
for(int k=0; k<10; k++){
if(!arr[xst_point+j][yst_point+k]){
++area;
arr[xst_point+j][yst_point+k] = true;
}
}
}
}
System.out.println(area);
br.close();
}
}
참고 포스팅