실버5
https://www.acmicpc.net/problem/2563
문제
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.
예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.
입력
첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다
출력
첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.
예제 입력1
3
3 7
15 7
5 2
예제 출력1
260
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int paperNum = Integer.parseInt(br.readLine());
int[][] whitePaper = new int[100][100]; // 2차원 배열로 도화지 영역 선언
// 한 행 씩 돌아가며 0으로 초기화
for (int[] row : whitePaper) {
Arrays.fill(row, 0); //Arrays.fill() 은 2차원 배열은 채우지 못하기 때문에 for 사용
}
// 첫 줄 - 색종이 숫자만큼 반복
for (int i=0; i<paperNum; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken()); //색종이를 붙인 x 좌표
int b = Integer.parseInt(st.nextToken()); //색종이를 붙인 y 좌표
// 색종이의 변 크기는 10 x 10으로 고정이므로 10번씩 반복
// for 조건식에 시작 수를 각 좌표, 끝 수를 각 좌표 +10으로 설정
// 현재 수행되는 좌표의 위치에 1을 채운다.
for (int j=a; j<a+10; j++) {
for (int k=b; k<b+10; k++) {
whitePaper[j][k] = 1;
}
}
}
//2차원 배열을 평면화 하여 모든 수의 값을 더하면 색종이가 겹쳐진 영역의 크기
int result = Arrays.stream(whitePaper)
.flatMapToInt(Arrays :: stream)
.sum();
System.out.println(result);
}
}
풀이
1. 가로 100, 세로 100 의 도화지를 2차원 int 배열로 표현한다.
2. 배열 내 모든 값을 0으로 초기화한다. -> Arrays.fill() 활용 (단, 해당 함수는 1차원 배열에만 가능)
3. 첫 줄에 입력받은 색종이의 수 만큼, 색종이 영역의 값을 모두 1로 변경하는 것을 반복한다.
4. 작업이 끝난 2차원 배열을 평면화하여 모든 값을 더한다. -> Arrays.stream() 활용
-> 만약 1차원 배열을 모두 합하고 싶다면 Arrays.stram(arr).sum() 만 사용하면 된다.
'개발 > 백준' 카테고리의 다른 글
백준 28278: 스택2 -Java (0) | 2024.05.25 |
---|---|
백준 1181: 단어 정렬 -Java (0) | 2024.05.25 |
백준 1018: 체스판 다시 칠하기 -Java (0) | 2024.05.25 |
백준 1753: 최단경로 (다익스트라 알고리즘) -Java (0) | 2024.05.24 |
백준 11047: 동전 0 -Java (0) | 2023.12.28 |