SAMSUNG/SSAFY 준비 (swea)

[SWEA 1979번] D2 - 어디에 단어가 들어갈 수 있을까 (Python)

sanadoing_ 2023. 10. 27. 19:24
728x90

> 파이썬

 

 

 

 

📖 문제 : 어디에 단어가 들어갈 수 있을까 (Python)

N X N 크기의 단어 퍼즐을 만들려고 한다. 입력으로 단어 퍼즐의 모양이 주어진다.

주어진 퍼즐 모양에서 특정 길이 K를 갖는 단어가 들어갈 수 있는 자리의 수를 출력하는 프로그램을 작성하라.

[예제]

N = 5, K = 3 이고, 퍼즐의 모양이 아래 그림과 같이 주어졌을 때


길이가 3 인 단어가 들어갈 수 있는 자리는 2 곳(가로 1번, 가로 4번)이 된다.
 


[제약 사항]

1. N은 5 이상 15 이하의 정수이다. (5 ≤ N ≤ 15)

2. K는 2 이상 N 이하의 정수이다. (2 ≤ K ≤ N)


[입력]

입력은 첫 줄에 총 테스트 케이스의 개수 T가 온다.

다음 줄부터 각 테스트 케이스가 주어진다.

테스트 케이스의 첫 번째 줄에는 단어 퍼즐의 가로, 세로 길이 N 과, 단어의 길이 K 가 주어진다.

테스트 케이스의 두 번째 줄부터 퍼즐의 모양이 2차원 정보로 주어진다.

퍼즐의 각 셀 중, 흰색 부분은 1, 검은색 부분은 0 으로 주어진다.


[출력]

테스트 케이스 t에 대한 결과는 “#t”을 찍고, 한 칸 띄고, 정답을 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

 

 

 

내 코드

T = int(input())

for test_case in range(1, T + 1):
    N, K = map(int, input().split())
    board = [list(map(int, input().split())) for _ in range(N)]
    result = 0
    for y in range(N):
        flag1, cnt1 = False, 0
        for x in range(N):
            if board[y][x] == 1:
                cnt1 += 1
            else:
                if flag1:
                    result += 1
                cnt1, flag1 = 0, False
            if cnt1 == K:
                flag1 = True
            elif cnt1 > K:
                flag1 = False

        if cnt1 == K:
            result += 1

        flag2, cnt2 = False, 0
        for x in range(N):
            if board[x][y] == 1:
                cnt2 += 1
            else:
                if flag2:
                    result += 1
                cnt2, flag2 = 0, False
            if cnt2 == K:
                flag2 = True
            elif cnt2 > K:
                flag2 = False
        if cnt2 == K:
            result += 1

    print(f'#{test_case} {result}')

 

 

 

 

swea

https://swexpertacademy.com/main/main.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

728x90