출처: https://www.acmicpc.net/problem/2563
2563번: 색종이
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록
www.acmicpc.net
제출 날짜: 2021년 8월 10일 화요일
생각
아래 두 질문글에 대한 답변을 보고 풀이법을 생각해낼 수 있었다.
https://www.acmicpc.net/board/view/29006
https://www.acmicpc.net/board/view/32209
그런데 문제를 풀다가 Arrays.fill()이 이차원 배열에는 적용이 안 된다는 것을 알게 되었다. for문을 사용해야 하나 싶었는데 아래 글에서 훨씬 나은 해결방법을 찾을 수 있었다.
https://stackoverflow.com/questions/7118178/arrays-fill-with-multidimensional-array-in-java
// 출처: 백준저지 2563번 색종이 https://www.acmicpc.net/problem/2563
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BOJ2563 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken()); // 색종이의 수 (100 이하)
int[][] paper = new int[101][101]; // 0부터 100까지
Arrays.stream(paper).forEach(a -> Arrays.fill(a, 0)); // 이차원 배열 paper을 0으로 채우기
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken()); // x좌표 (색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리)
int y = Integer.parseInt(st.nextToken()); // y좌표 (색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리)
for (int j = x; j < x + 10; j++) {
for (int k = y; k < y + 10; k++) {
paper[j][k] = 1; // 해당 위치를 1로 바꾸기
}
}
}
int total = 0; // 답
for (int i = 0; i < 101; i++) { // 1로 채워진 면적을 모두 더하기
for (int j = 0; j < 101; j++) {
total = total + paper[i][j];
}
}
System.out.println(total); // 답
}
}
'알고리즘 > 백준저지' 카테고리의 다른 글
백준저지 2559번 수열 (0) | 2021.08.15 |
---|---|
백준저지 2605번 줄 세우기 (0) | 2021.08.15 |
백준저지 3040번 백설 공주와 일곱 난쟁이 (0) | 2021.08.12 |
백준저지 1783번 병든 나이트 (0) | 2021.08.09 |
백준저지 1764번 듣보잡 (0) | 2021.08.07 |