간단하게 생각하다 틀린 문제입니다.
2563번: 색종이
가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록
www.acmicpc.net
처음 접근은 단순히 겹치는 구간을 N*100에서 빼면 된다고 생각했습니다.
틀린 코드
#색종이의 크기는 모두 10*10이다
#겹치는 부분을 빼면 될 것.
N = int(input())
position_arr = []
for _ in range(N):
position_arr.append(list(map(int,input().split())))
# position_arr.sort()
# print(position_arr)
area = N*100
for i in range(N-1):
for j in range(i+1,N):
if abs(position_arr[i][0]-position_arr[j][0]) < 10 and\
abs(position_arr[i][1]-position_arr[j][1]) < 10:
area -=(10-abs(position_arr[i][0]-position_arr[j][0]))*(10- abs(position_arr[i][1]-position_arr[j][1]))
print(area)
하지만 이렇게 접근하면 따져야 할 조건들이 많아지게 되어 다른 방법을 찾게 됐습니다.
정답코드
white_area = [[False for _ in range(101)]for _ in range(101)] #이차원 배열 선언
N = int(input())
for _ in range(N):
x_start,y_start = map(int,input().split())
for i in range(x_start,x_start+10):
for j in range(y_start,y_start+10):
white_area[i][j] = True #색종이 너비에 해당하는 범위만큼을 True
# print(white_area)
black_area = 0
for i in white_area:
black_area+=i.count(True) #모든 색종이 너비를 count
print(black_area)
이렇게 이차원 배열을 선언하여 색종이의 너비만큼을 True로 대입한다면 겹치는 부분을 따로 판단할 필요 없이
True의 갯수만 확인하면 됩니다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2660-회장뽑기 [Python] (0) | 2023.01.30 |
---|---|
[11659] 구간 합 구하기 4 (Python) (0) | 2023.01.03 |
[11502] 세 개의 소수 문제 (Python) (0) | 2023.01.03 |
[1912] 연속합 (Python) (0) | 2022.12.27 |
[1904] 01타일 (Python) (0) | 2022.12.27 |