핵심 포인트
- 2차원 배열
- 2차원 리스트에서의 sum 함수
제출코드
A = [[0 for _ in range(100)] for _ in range(100)]
for _ in range(int(input())):
x, y = map(int, input().split())
for idxx in range(x, x + 10 if x + 10 < 100 else 100):
for idxy in range(y, y + 10 if y + 10 < 100 else 100):
A[idxx][idxy] = 1
print(sum(sum(A, [])))
해설
먼저, 문제에서 정의한 100 x 100 크기의 비어있는 도화지를 정의해줍니다. 이를 A라고 하고 0으로 채우도록 하죠. 그리고 총 N번 반복하면서 10 x 10 크기의 정사각형을 도화지에 채워야합니다. 위치는 좌측하단을 기준으로 좌표 (x, y)를 받습니다.
위 코드에서 핵심은 문제에서 제시된 위치에 정사각형을 채웠을 때 해당 영역을 1로 채우는 것 입니다. 그리고 출력할 때는 정사각형들로 채워진 영역들은 전부 1이 들어가있기 때문에 모든 요소를 더해주면 되겠습니다. 이를 위해 이중 반복문을 이용해서 좌측하단 좌표 (x, y)를 기준으로 오른쪽으로 10칸, 위쪽으로 10칸을 1로 바꾸어줍니다. 이때, 주의할 점은 정사각형이 도화지 밖으로 나가게 되면 인정하지 않기 때문에 x에서 오른쪽으로 10칸을 더한 위치가 100번째 칸을 넘어가면 이를 그냥 100으로 바꾸어줍니다. y도 마찬가지로 위쪽으로 10칸을 더한 위치가 100번째 칸을 넘어가면 이를 그냥 100으로 바꾸어준 뒤 반복문을 순회하며 해당 위치를 1로 변환해주면 됩니다.
반복문이 모두 끝나게 되면 1로 채워진 2차원 배열 A에서 1의 개수를 출력하면 됩니다. 하지만 파이썬의 sum 함수는 1차원 배열을 위해 만들어졌기 때문에 이를 2차원 배열을 1차원 배열로 변환한 뒤 sum 함수를 적용해야합니다. 파이썬에서는 이를 위해 sum(A, [])를 적용하면 2차원 배열을 1차원 배열로 만들어주기 때문에 여기에 한번 더 sum 함수를 적용하면 1의 개수, 즉 정사각형 영역이 칠해진 영역의 넓이를 구할 수 있습니다.
참고자료 및 그림출처
'Programming > Coding Problem' 카테고리의 다른 글
BOJ 11005번: 진법 변환 2 (0) | 2023.05.22 |
---|---|
BOJ 2745번: 진법 변환 (0) | 2023.05.22 |
BOJ 10798번: 세로읽기 (0) | 2023.05.21 |
BOJ 2566번: 최댓값 (0) | 2023.05.20 |
BOJ 2738번: 행렬 덧셈 (0) | 2023.05.20 |