문제분류
구현
문제
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다
출력
첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.
예제 입력 1
3
3 7
15 7
5 2
예제 출력 1
260
Solution
- 도화지의 가로,세로 최대는 100씩이므로, int[100][100] 배열을 만듭니다.
- input을 받으면서, 해당하는 구간을 모두 1로 할당합니다. (겹치는 구간은 이미 1로 할당되어 있으므로, 고려할 필요가 없어집니다.)
- 도화지 최대 범위가 100이므로, 각 for문에 break;가 되는 조건을 달아줍니다. (if (k > 100) break;, if (j > 100) break;)
- 전체 배열(papers)을 돌면서, 요소가 1인 부분을 모두 더해줍니다.(sum) (sum == 검은 영역의 넓이)
코드
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int[][] papers = new int[100][100];
int tc = sc.nextInt();
int sum = 0;
for (int i = 0 ; i < tc; i ++) {
int x = sc.nextInt();
int y = sc.nextInt();
for (int j = x; j < x +10; j++) {
for (int k = y; k < y + 10; k++) {
papers[j][k] = 1;
if (k > 100) break;
}
if (j > 100) break;
}
}
for (int j = 0 ; j < 100; j++) {
for (int k =0; k < 100; k++) {
if (papers[j][k] == 1) sum +=1;
}
}
System.out.println(sum);
}
}
느낀 점
알고리즘 동아리에서 접했던 문제인데, 어떻게 접근해야할지 몰라서 당시에 많이 헤맸던 문제입니다.
SSAFY에 입과하면서 당시에 해결하지 못했던 문제를 첫 문제로 풀어라 했어서 많이 당황했습니다.
처음엔 if 조건을 달아서 겹치는 부분을 해결해려했으나, 색종이가 2개씩, 3개씩 겹치는 경우가 많아서 if 조건으로는 해결하기 어려웠습니다. 옆 자리 SSAFY 동기가 2차원 배열로 접근해보라는 힌트를 주어서 겨우 해결할 수 있었습니다. (👍👍)
어떤 문제든 상황이든 많이 접해보고 상황에 맞는 해결책을 바로바로 찾을 수 있는 능력이 실력이란 것을 느끼게 해준 문제였습니다.
앞으로 다양한 문제를 많이 경험하면서 적당한 알고리즘이나 풀이 과정을 선정할 수 있어야겠다고 생각했습니다.
'Algorithm' 카테고리의 다른 글
[Java] 백준 #1931 : 회의실 배정 (1) | 2023.02.11 |
---|---|
[Java] 백준 #15649 : N과 M (1) (0) | 2023.02.01 |
[Java] 백준 #2231 : 분해합 (0) | 2023.01.10 |
[JavaScript] 2022 KAKAO : 신고 결과 받기 (0) | 2023.01.07 |
[JavaScript] 부스트캠프 웹·모바일 자가진단 : 함수구현 (0) | 2023.01.07 |