https://www.acmicpc.net/problem/3495
시간 1초, 메모리 128MB
input :
output :
조건 :
창영이는 메모장에 '.', '\', '/'을 이용해서 도형을 그렸다.
1*1크기의 단위 정사각형을 나타낸다.
위의 사이트에서 테케를 받아서 해결한다면 훨씬 수월하다.
1 번째 구상
예제와 같이 "/"이 나오면 "\"이 나와서 닫아준다. 그렇다면 "/"이 꼭 나와야 도형이 되니까
이를 체킹하는 방식을 사용하자.
2 번째
예제에서도 "\"이 나오고 "/"이 나오면서 닫아주는 그림이 있다. 대각선의 두 방향 모두 체킹을 해야 한다.
3번째
특정 테케에서는 "/"이 나오고 "/"이 나오는 방식도 존재한다. 생각보다 큰 그리드에서는 이와 같은 방식도 가능하다.
그래서 맨 처음 나오는 대각선을 우선 체킹 하고 어떤 대각선이 오든 간에 초기화를 하는 방식을 사용했다.
"/" -> "/" 이나 "/" -> "\"이나 어차피 계산할 때는 0.5를 더하는 방식이라 상관이 없다.
다각형
그래서 대각선으로 연결되지 않거나 하는 경우는 없다는 의미이다.
해당 row에서 열리고 결국 닫히거나 동일한 대각선이 위치할 것이다.
해당 문제는 컴파일러 괄호 체킹하는 문제와 비슷하다. 그래서 변수 2개로 체킹을 해야 겠다는 생각을 우선 해야 한다.
해당 대각선이 있었다면 빈칸은 +1 하는 공간이 되고 그렇지 않다면 무시하면 되는 공간이다.
import sys
h, w = map(int, sys.stdin.readline().split())
ans = 0
for _ in range(h):
temp = list(sys.stdin.readline().rstrip())
left, right = None, None
for item in temp:
if left and item != ".":
ans += 0.5
left = None
continue
if right and item != ".":
ans += 0.5
right = None
continue
if item == "\\":
left = 1
ans += 0.5
continue
if item == "/":
right = 1
ans += 0.5
continue
if left or right:
ans += 1
print(int(ans))