https://www.acmicpc.net/problem/2563
2563번: 색종이
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록
www.acmicpc.net
문제를 해석해보자!
수학적인 사고가 필요할꺼 같지만
문제 자체는 단순히 주어진 색종이들이 붙여진 종이에서
실제로 색종이가 붙은 부분의 넓이를 계산하는것이다.
정리해보자!
int[][] paper = new int[100][100]; // 종이 표시 배열
int n = scanner.nextInt(); // 색종이의 개수
문제에서 제시한
가로, 세로 크기 100 x 100
흰 색 도화지를
행렬 100 인 배열을 만들어주자!
그리고
문제 입력 시 색종이의 개수를 담아줄 변수를 만들자!
static void markPaper(int[][] paper, int x, int y) {
for (int i = x; i < x + 10; i++) {
for (int j = y; j < y + 10; j++) {
paper[i][j] = 1;
}
}
}
흰 도화지 (배열) 위에
가로, 세로 크기 10 x 10 색종이를 채워 넣어주는
markPaper 이라는 함수에 정의해보자!
markPaper > '각 색종이가 붙은 부분 ' 은 흰 도화지(배열)에 1로 표시
TMI 이긴한데
'static' 을 사용하는 이유는
메서드나 변수는 특정한 객체의 인스턴스에 속하는 것이 아니라
클래스 자체에 속하게 되어
예를 들어 Main이라는 클래스 안이라고 치면
클래스 자체에 속하게 되어 클래스의 모든 인스턴스에서 공유한다!
더 쉽게 이야기하면 해당 메서드를 클래스 이름으로 직접 호출 가능!!
출력해보자!
색종이가 붙은 부분의 넓이를 계산하기 위해 calculateArea 함수를 정의해보자!
static int calculateArea(int[][] paper) {
int area = 0;
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
if (paper[i][j] == 1) {
area++;
}
}
}
return area;
}
1이 존재 할 경우 'area++' 라는 조건식을 추가해주자!
그리고 1이 누적되어 있는 area 를 리턴해주자!
이제 합쳐보자!
Scanner
mport java.util.Scanner;
public class ColorPaper_2563 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[][] paper = new int[100][100];
int n = scanner.nextInt();
// 각 색종이의 위치를 입력받아 배열에 표시
for (int i = 0; i < n; i++) {
int x = scanner.nextInt();
int y = scanner.nextInt();
markPaper(paper, x, y);
}
// 색종이가 붙은 부분의 넓이 계산
int area = calculateArea(paper);
System.out.println(area);
}
// 색종이가 붙은 부분을 1로 표시
static void markPaper(int[][] paper, int x, int y) {
for (int i = x; i < x + 10; i++) {
for (int j = y; j < y + 10; j++) {
paper[i][j] = 1;
}
}
}
// 색종이가 붙은 부분의 넓이를 계산
static int calculateArea(int[][] paper) {
int area = 0;
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
if (paper[i][j] == 1) {
area++;
}
}
}
return area;
}
}
성공!!!
정상 출력 확인!!
다른 방식으로도 해보자!
BufferedReader
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class ColorPaper_2563 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[][] paper = new int[100][100];
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
markPaper(paper, x, y);
}
int area = calculateArea(paper);
System.out.println(area);
}
static void markPaper(int[][] paper, int x, int y) {
for (int i = x; i < x + 10; i++) {
for (int j = y; j < y + 10; j++) {
paper[i][j] = 1;
}
}
}
static int calculateArea(int[][] paper) {
int area = 0;
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
if (paper[i][j] == 1) {
area++;
}
}
}
return area;
}
}
힘내자!!
'java' 카테고리의 다른 글
백준 2750번 문제 수 정렬하기(Java_자바) (0) | 2024.03.10 |
---|---|
백준 2444번 문제 별 찍기 - 7(Java_자바) (1) | 2024.03.08 |
백준 10798번 문제 세로읽기(Java_자바) (0) | 2024.03.06 |
백준 11720번 숫자의 합(Java_자바) (0) | 2024.03.04 |
백준 2566번 문제 최댓값(Java_자바) (0) | 2024.03.03 |