백준 2563번( 자바 )
구현
백준 2563번 구현 문제를 Java로 풀어보았다.
결국 못 풀었다. 정답률이 꽤 높던데 화가 났다. 하지만 내가 멍청한 거니까 어쩔 수 없다. ㅎㅎ
겹치는 넓이는 어떻게 처리해줄 건가?
애초에 겹치는 넓이를 따로 처리할 필요없이 해결하면 된다. 우리가 계산해야할 넓이만을 체크하면 되는 거다. 좌측 하단의 좌표가 입력값으로 주어진다. 그러면 정사각형의 변의 길이가 2
라고 하면, x~x+1 과 y~y+1만 점을 찍으며 지나가면 그 점의 개수가 곧 정사각형의 넓이가 되는 것이다.
이처럼 정사각형의 꼭짓점 하나를 입력 받을 때마다 그 정사각형이 커버하는 점의 위치를 찍으며 마지막에 모든 점의 개수를 세면 모든 정사각형이 커버하는 넓이를 계산할 수 있게 된다.
매번 점을 찍는데 만약 이미 점이 찍혀있다면 count해줘서 넓이값에 추가하면 된다.
이를 코드로 작성하면 다음과 같다.
int S = 0;
int n = Integer.parseInt(bfr.readLine());
for(int i=0; i<n; i++){
stk = new StringTokenizer(bfr.readLine());
int x = Integer.parseInt(stk.nextToken());
int y = Integer.parseInt(stk.nextToken());
for(int a=x; a<x+10; a++){
for(int b=y; b<y+10; b++){
if(map[a][b]==1) continue;
else map[a][b] = 1;
S++;
}
}
}
이 문제는 사실 내 힘으로 푼 문제가 아니니까 다음에 또 만나면 그땐 꼭 내 힘으로 조져야지.
아래는 다른 사람의 풀이를 참고해 작성한 제출한 코드다.
import java.util.*;
import java.io.*;
public class boj2563 {
public static void main(String args[]) throws IOException {
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer stk;
int[][] map = new int[100][100];
int S = 0;
int n = Integer.parseInt(bfr.readLine());
for(int i=0; i<n; i++){
stk = new StringTokenizer(bfr.readLine());
int x = Integer.parseInt(stk.nextToken());
int y = Integer.parseInt(stk.nextToken());
for(int a=x; a<x+10; a++){
for(int b=y; b<y+10; b++){
if(map[a][b]==1) continue;
else map[a][b] = 1;
S++;
}
}
}
bfw.write(String.valueOf(S));
bfw.close();
}
}
의미는 없지만 맞은 코드라는 걸 알려주기 위해 첨부한다.
Author And Source
이 문제에 관하여(백준 2563번( 자바 )), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@topqr123q/백준-2563번-자바저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)