문제
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 넓이를 구하는 프로그램을 작성하시오.

예를 들어 흰색 도화지 위에 세 장의 검은색 색종이를 그림과 같은 모양으로 붙였다면 검은색 영역의 넓이는 260이 된다.
입력
첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다
출력
첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.
예제 입력 1 복사
3
3 7
15 7
5 2
예제 출력 1 복사
260
arr = [[0]*100 for i in range(100)] # 100x100 크기의 배열 생성
N = int(input()) # 색종이의 수 입력 받음
for _ in range(N): # 색종이의 수만큼
x, y = map(int, input().split()) # 색종이의 왼쪽, 아래쪽 변과 도화지 사이 거리 x, y 입력 받음
for i in range(x, x+10): # 색종이의 크기는 10x10임
for j in range(y, y+10): # 위와 같음
arr[i][j] = 1 # 해당하는 부분을 0에서 1로 바꿈
result = 0
for i in range(100): # 도화지 크기가 100x100이므로 arr은 100개의 행, 100개의 열을 가짐
result += arr[i].count(1) # 도화지의 각 100개의 행을 순회하며 도화지에서 값이 1인 곳을 셈
print(result)
엄청 어렵다...
도화지가 100*100 크기라서 해당하는 크기만큼의 배열을 생성한다.
그 후 색종이의 개수를 입력받는다.
색종이의 수만큼 x, y를 입력 받는다.
x는 색종이의 왼쪽 변과 도화지 왼쪽 변 사이의 거리, y는 색종이의 아래쪽 변과 도화지 아래쪽 변 사이의 거리이다.
색종이의 크기가 10*10이므로 범위는 각각 10개씩 x~x+10, y~y+10까지이다.
이게 곧 10*10 크기의 색종이가 있는 칸을 1로 바꾸는 것이다. 1은 색종이가 차지하는 영역을 의미함.
도화지의 각 행을 순회하며(arr은 100개의 원소를 가진 리스트가 100개 있는 이중리스트이다.), 1의 개수를 세고 출력한다.
'코딩테스트 > 백준' 카테고리의 다른 글
백준 > 단계별로 풀어보기 > 일반 수학 1 > 11005번: 진법 변환2 (0) | 2024.07.19 |
---|---|
백준 > 단계별로 풀어보기 > 일반 수학 1 > 2745번: 진법 변환 (0) | 2024.07.19 |
백준 > 단계별로 풀어보기 > 2차원 배열 > 10798번: 세로읽기 (0) | 2024.07.18 |
백준 > 단계별로 풀어보기 > 2차원 배열 > 2566번: 최댓값 (0) | 2024.07.18 |
백준 > 단계별로 풀어보기 > 2차원 배열 > 2738번: 행렬 덧셈 (0) | 2024.07.18 |