13732. 정사각형 판정

홍범선·2023년 4월 19일
0

SW Expert Academy

목록 보기
10/18

13732. 정사각형 판정

문제

테스트 케이스 2번 째 안되는 이유
'#'이 4개 있지만 서로 떨어져 있으므로 하나의 정사각형을 이루는 조건을 만족하지 않음

풀이

  1. '#'의 개수를 구한다. 그리고 처음 '#'이 나온 위치를 저장한다.

    charp_cnt = '#'총 개수, pos_row, pos_col = '#'이 처음 나온 위치

  2. pos_row, pos_col에서 가로 길이를 구한다.

    side= "처음 위치에서 시작된 정사각형 가로 길이" total = "#의 개수"

  3. pos_row, pos_col에서 세로 길이를 구한다.

    side_row는 세로 길이인데 가로 길이보다 크면 끝낸다. 그리고 "#"의 개수가 가로 길이와 맞지 않아도 끝낸다.

  4. 정답구하기

    정사각형안에서 "#"과 전체 "#"과 비교한다. 또한 정사각형 조건(flg)값을 만족하는지 비교한다.

for test_case in range(1, T + 1):
    n = int(input())
    graph = []
    for _ in range(n):
        graph.append(list(input()))
    charp_cnt, pos_row, pos_col = 0, 0, 0
    for row in range(n):
        for col in range(n):
            if graph[row][col] == "#":
                charp_cnt += 1
                if charp_cnt == 1:
                    pos_row = row
                    pos_col = col
     
    side = 0
    total = 0
    for i in range(pos_col, n):
        if graph[pos_row][i] == "#":
            side += 1
            total += 1
        else:
            break
            
            
    flg, side_row = False, 1
    for j in range(pos_row + 1, n):
        cnt = 0
        side_row += 1
        if side_row> side:
            break
        for i in range(pos_col, n):
            if graph[j][i] == "#":
                cnt += 1
                total += 1
            else:
                break
        if cnt != side:
            flg = True
            break
            
    if total == charp_cnt and not flg:
        print("#" + str(test_case) + " " + "yes")
    else:
        print("#" + str(test_case) + " " + "no")
profile
날마다 성장하는 개발자

0개의 댓글