백준
[백준] 2563번: 색종이- JAVA(자바)
z00h
2022. 11. 18. 19:06
9단계 2차원배열 문제중 가장 난이도 있는 문제였지만 쉽게 풀 수 있다.
코드를 보기전에 앞서 설명을 하자면
입력받은 위치에 따라 첫번째 입력을 행(가로), 두번째 입력을 열(세로)로 받아온다고 생각해보자.
도화지의 크기는 100 X 100이고 색종이의 크기는 10 X 10으로 고정적이다.
색종이의 크기가 주어졌기때문에 첫번째 색종이의 위치로 3,7을 입력받는다면
첫번째 색종이의 실제 범위는 가로 3 ~ 13, 세로 7 ~ 17의 영역을 도화지 중에서 차지하게 된다.
입력 받은 영역들의 값을 배열에 넣어 바꿔주고 그 바뀐 값들이 몇개인지 배열 전체에 for문을 돌려 구하면 되는 문제이다.
색종이 | 행(가로) | 열(세로) |
입력받은 위치(실제 범위) | 3 (3 ~ 13) | 7 (7 ~ 17) |
15 (15 ~ 25) | 7 (7 ~ 17) | |
5 (5 ~ 15) | 2 (2 ~ 12) |
가로, 세로 크기가 각각 100이라고 하였으니까 100행 100열의 2차원 배열을 boolean 타입을 이용하여 생성을 해준다.
boolean 타입의 기본값은 false이고 입력 받은 위치에 배열들값을 true로 바꿔줄 것이다.
for문을 이용하여 색종이의 수를 입력받고 for문 안에서 가로, 세로의 크기를 입력받은 후 입력받은 색종이 위치의 값을
getSquare 메소드로 보내준다.
getSquare 메소드는 입력받은 가로, 세로의 위치를 받아 실제 범위만큼 값을 true로 바꿔주는 메소드이다.
모든 입력을 마치면 이제 배열에서 true로 바뀐 값들만 count 변수를 통해 세어주기만 하면 된다!
import java.util.Scanner;
public class b2563 {
public static boolean [][] arr = new boolean[100][100];
public static void main(String[] args ) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int A;
int B;
int count=0;
for(int i=0; i<N; i++) {
A = in.nextInt();
B = in.nextInt();
getSquare(A,B);
}
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr.length; j++){
if(arr[i][j]==true) {
count++;
}
}
}
System.out.println(count);
}
public static void getSquare(int A,int B) {
for(int i=A; i<A+10; i++) {
for(int j=B; j<B+10; j++) {
arr[i][j] = true;
}
}
}
}