티스토리 뷰

728x90

thinking

행은 볼 필요없이 열만 차례대로 순회하며 1-2 의 순서이면 카운트를 해주는 방향으로 생각.

1-2 의 순서인지 어케 체크? -> stack에 넣었다 뺐다하며 확인

처음 1이 나오면 stack에 넣고, 스택에 1이 있는 상태에서 2가 나오면 pop해서 빈 스택을 만들어주고 교착상태 카운팅+1 해줌

이 과정을 행의 처음부터 끝까지 반복하기 위해 while r < N 조건을 줬다.

 

코드

T = 10
for tc in range(1, T+1):
    N = int(input())
    a = [list(map(int, input().split())) for _ in range(N)]
    # 1: N극 성질-> 빨강이  2: S극 성질-> 파랭이

    cnt = 0
    for j in range(N):  # (0,j) 열탐색
        r, c = 0, j
        stack = []
        # 아래로 내려가면서 <1--2> 의 순서이면 체킹
        while r < N:
            if not stack and a[r][c] == 1:  # 스택이 비어있는 상태이면서 1 이면 stack에 넣음
                stack.append(1)
            elif stack and a[r][c] == 2:  # 스택에 1이 있는 상태에서 2가 나오면 pop 해서 cnt에 더해주기
                cnt += stack.pop()
            r += 1  # 아래로 진행하기 위해 row 인덱스 증가시켜주기

    print("#{} {}".format(tc, cnt))
댓글