https://www.acmicpc.net/problem/2563
2563번: 색종이
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록
www.acmicpc.net
문제
알고리즘
처음에는 정말 수학적으로 생각해서 풀었었는데 수학적으로 접근하고자 하면 .. 복잡해서 틀릴 확률이 높아진다.
1. Boolean 2차 배열을 생성한다.
static boolean arr [][] = new boolean[101][101];
2. 색종이의 개수를 입력 받고 각 색종이의 x와 y값을 저장한다.
int num = Integer.parseInt(br.readLine());
for(int i=0; i<num; i++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
// makeSquare함수 설명 예정
}
3. x와 y값을 인자로 넘겨주면 색종이의 위치를 true로 바꿔주는 함수(makeSquare)를 만든다.
public static void makeSquare(int x, int y) {
int dx = x + 10;
int dy = y + 10;
for(int i=x; i<dx ; i++) {
for(int j=y; j<dy; j++) {
arr[i][j] = true;
}
}
}
4. true의 개수를 세서 면적을 계산한다.
int cnt = 0;
for(int i=0; i<101; i++) {
for(int j=0; j<101; j++) {
if(arr[i][j]) {
cnt++;
}
}
}
풀이
import java.util.*;
import java.io.*;
public class Main {
static boolean arr [][] = new boolean[101][101];
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 num = Integer.parseInt(br.readLine());
for(int i=0; i<num; i++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
makeSquare(x, y);
}
int cnt = 0;
for(int i=0; i<101; i++) {
for(int j=0; j<101; j++) {
if(arr[i][j]) {
cnt++;
}
}
}
br.close();
bw.write(Integer.toString(cnt));
bw.flush();
bw.close();
}
public static void makeSquare(int x, int y) {
int dx = x + 10;
int dy = y + 10;
for(int i=x; i<dx ; i++) {
for(int j=y; j<dy; j++) {
arr[i][j] = true;
}
}
}
}
'Baekjoon' 카테고리의 다른 글
[백준] 9012번 괄호 (Java) (3) | 2024.02.27 |
---|---|
[백준] 2745번 진법 변환 (Java) (0) | 2024.02.12 |
[백준] 1316번 그룹 단어 체커 (Java) (0) | 2024.02.02 |
[백준] 2941번 크로아티아 알파벳 (Java) (0) | 2024.01.31 |
[백준] 1157번 단어 공부 (Java) (0) | 2024.01.31 |