' 2567번 색종이-2 '
https://www.acmicpc.net/problem/2567
하나
의 색종이 도형으로 생각해서 둘레의 길이를 구해야 한다.True
가 아니라면 둘레값이므로 +1 해준다.x~x+9
를 체크해야 한다.모서리
와 변
의 tmp는 다르다.영역 안
이라는 뜻이다.N = int(input())
arr=[[False for _ in range(101)] for _ in range(101)] #가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지
for _ in range(N):
x,y=map(int,input().split())
for i in range(x,x+10): # 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이
for j in range(y,y+10): # 좌표가 아니라 영역이므로 range는 y~y+9
arr[j][i] = True # 색종이 영역 칠하기
total=0 # 둘레값
dx=[0,0,1,-1] # 4방향
dy=[1,-1,0,0]
for i in range(101): # 흰색 도화지에서 색종이 영역 찾기
for j in range(101):
if arr[j][i] == True: # 한점이 1일때
tmp=0
for k in range(4):
if arr[j+dy[k]][i+dx[k]] == True:
tmp+=1
# 그점의 4방향이 모두 1가 아니라면 그점은 둘레값
if tmp == 3: # 3방향이 1 라면 변의 길이
total +=1
elif tmp == 2: # 2방향이 1 라면 모서리의 길이 -> ㄱ 자 모양 => 가로, 세로 둘다 존재 하므로 +2
total +=2
print(total)
def count(arr):
cnt = 0
for lst in arr:
for i in range(1, len(lst)):
if lst[i-1]!=lst[i]: # 현재값과 직전의 값이 다르면 경계선!
cnt+=1
return cnt
N = int(input())
arr = [[0]*102 for _ in range(102)]
for _ in range(N):
# 해당 영역을 1로 표시
sj, si = map(int, input().split())
for i in range(si, si+10):
for j in range(sj, sj+10):
arr[i][j]=1
arr_t = list(zip(*arr)) # 세로줄
ans = count(arr) + count(arr_t) # 가로로 체크 + 세로로 체크
print(ans)
N=int(input())
board=[[0]*102 for _ in range(102)] #만약 마지막 좌표쪽에 둘레가 있다면 체크하기 어려우므로 여유를 더주기
for _ in range(N):
x, y = map(int, input().split())
# 색종이가 정사각형의 10x10
for i in range(x, x + 10):
for j in range(y, y + 10):
board[i][j] = 1
cnt=0
#바깥영역 0, 안쪽 검은 영역 1 카운트 1 증가 (열 기준으로)
for i in range(1,101):
for j in range(1,101):
if board[i][j] == 0 and board[i][j+1]==1:
cnt+=1
if board[i][j]==1 and board[i][j+1] ==0:
cnt+=1
#바깥영역 0, 안쪽 검은 영역 1 카운트 1 증가 (행 기준으로)
for i in range(1,101):
for j in range(1,101):
if board[i][j] == 0 and board[i+1][j]==1:
cnt+=1
if board[i][j]==1 and board[i+1][j] ==0:
cnt+=1
print(cnt)
N=int(input())
board=[[0]*102 for _ in range(102)] #만약 마지막 좌표쪽에 둘레가 있다면 체크하기 어려우므로 여유를 더주기
for _ in range(N):
x, y = map(int, input().split())
# 색종이가 정사각형의 10x10
for i in range(x, x + 10):
for j in range(y, y + 10):
board[i][j] = 1
cnt=0
for i in range(1,101):
for j in range(1,101):
#i,j 좌표가 검은 영역이라면 4방탐색을진행해서 흰영역에 도달하면 카운트 1 증가
if board[i][j] == 1:
for di,dj in ((0,1),(0,-1),(1,0),(-1,0)):
ni = i+di
nj= j+dj
if board[ni][nj] == 0:
cnt +=1
print(cnt)