참고: https://www.acmicpc.net/problem/2563
✔️ 문제
문제는 다음과 같다.
✔️ 풀이
첫째 줄에 붙힐 색종이 수를 입력받고,
색종이의 수만큼 처음 입력 받는 수는 색종이의
왼쪽 변과 도화지의 왼쪽 변 사이의 거리를,
다음 입력 받는 수는 아래쪽 변과 도화지 아래쪽 변 사이의
거리를 나타낸다고 한다
이렇게 글로 보면 이해하기가 좀 어려워서
그림을 보면서 이해해보았다.
입력받는 첫 번째 수는 색종이의 가장 왼쪽 직선이
도화지 왼쪽 변과의 거리가 3, 5, 15에 해당한다는 소리이다.
즉, x축의 거리가 3, 5, 15에 해당하며
색종이는 10x10에 해당하는 정사각형이므로
각 거리에 10을 더한 13, 15, 25가 x축에 적혀있다.
두 번째 수는 아래쪽 변 사이의 거리이므로
y축의 거리가 2와 7에 해당하고 10을 더한 12와 17이
y축에 적혀있는 것이다.
첫 번째로 입력받는 3은 색종이의 수인데,
10x10의 정사각형 3장이므로 3x100해서
총 붙힌 색종이의 넓이는 300이라고 생각할 수 있고,
그 중 x축은 12-7인 5만큼, y축은 13-5인 8만큼 겹쳐져서
5x8인 40에 해당하는 넓이만큼을 뺀
300-40인 260이 출력으로 나오는 것이다.
그렇다면 총 색종이의 넓이에서
겹쳐지는 부분을 어떻게 측정해서 뺄 수 있을까?
n=int(input())
data=[[0 for _ in range(100)] for _ in range(100)]
for _ in range(n):
x,y=map(int, input().split())
for i in range(x, x+10):
for j in range(y, y+10):
data[i][j] = 1
count=0
for i in range(100):
for j in range(100):
if data[i][j] == 1:
count+=1
print(count)
다음과 같이 도화지를 100x100만큼의 2차원 배열이라고 생각했다.
그리고 해당 도화지를 0으로 칠한 것이 흰색 도화지이며,
10x10 크기이기 때문에 입력받는 수에서 10만큼을 더한 만큼
1을 검은색으로 취급하여 배열에 1로 저장해준다.
어차피 이미 돈 숫자만큼의 배열이라면 1을 다시 1로 덮어도
같은 검은색이기 때문에 계속해서 덧칠만 될 뿐이지
넓이는 계속해서 추가될 것이라고 생각했다.
그리고나서 해당 배열을 돌면서 검은색인 1로 저장된 부분마다
count에 1씩 더해주면 최종적으로 색칠된 검은색의
넓이가 나올 것이라고 생각했고 맞게 풀 수 있었다.
화이팅 💪
'알고리즘(algo) > 백준' 카테고리의 다른 글
[백준] 2292번 - 벌집 (0) | 2023.01.22 |
---|---|
[백준] 1712번 - 손익분기점 (0) | 2023.01.22 |
[백준] 2566번 - 최댓값 (0) | 2023.01.21 |
[백준] 2577번 - 숫자의 개수 (0) | 2023.01.20 |
[백준] 1065번 - 한수 (0) | 2023.01.20 |