https://www.acmicpc.net/problem/2567
(문제)
검은색 영역의 둘레 길이를 구하는 문제
(처음 생각)
겹치는 구간은 생각하지 못해서 헤맸다
처음에 생각해냈던 풀이는 검은 상자 전체를 감싸는 사각형의 둘레를 구하는 건줄 알았음.
(문제를 제대로 읽자!)
(풀이)
일단 상자에 해당하는 공간들을 1로 채운다.
배열은 101 X 101
> 100으로 하지 않는 이유? 상하좌우를 파악할 때 인덱스 범위 밖으로 벗어나는 걸 미리 방지하기 위함
1로 상자 체크 하는 걸 생각해내지 못했음.
둘레를 구할 때 배열을 이용하여 이런식으로 해결하는 방식을 한 번 떠올려보도록 노력할 것.
모서리 일땐 2를 더해줘야 한다.
상하좌우 중 1개가 0이면, cnt==1이면 result+=1
num = int(input())
array = [[0 for _ in range(101)] for _ in range(101)]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
# map
for _ in range(num):
x, y = map(int, input().split())
for i in range(x, x + 10):
for j in range(y, y + 10):
array[i][j] = 1
result = 0
for i in range(1,101):
for j in range(1,101):
if array[i][j] == 1:
cnt = 0
for k in range(4):
nx = i + dx[k]
ny = j + dy[k]
if array[nx][ny] == 1:
cnt += 1
if cnt == 3: # 상하좌우 중 3칸이 1로 채워져있으면
result += 1
elif cnt == 2: # 상자 각종 모서리에 해당, 둘레를 구하는 것이기 때문에 +2를 해줘야한다.
result += 2
print(result)
'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글
[n18511] 큰 수 구성하기 in python (0) | 2021.09.27 |
---|---|
[n2304] 창고 다각형 - 파이썬 (0) | 2021.09.23 |
[n1743] 음식물 피하기 | python | BFS (0) | 2021.09.10 |
[n1713] 후보 추천하기 in python (0) | 2021.09.10 |
[n9934] 완전 이진 트리 in python (0) | 2021.09.09 |