SWEA[1979] : 어디에 단어가 들어갈 수 있을까

1622 단어 SWEASWEA

SWEA[1979] 문제

import sys
sys.stdin= open('input.txt')

T = int(input()) # 테스트 케이스

for tc in range(1,T+1):
    n , k = map(int,input().split())
    puzzle = [list(map(int,input().split())) for _ in range(n)]

    possible = 0

    # 행방향이 K 일때 cnt 구하기
    for i in range(n):
        cnt = 0
        for j in range(n):
            # 위치값이 1이면 넣을 수 있는 단어 수 증가
            if puzzle[i][j]:
                cnt += 1
            # 위치값이 0 일 때
            else :
                # 넣을 수 있는 단어값이 k 와 같다면
                if cnt == k :
                    possible += 1 # k길이 단어를 넣을 수 있는 횟수 증가
                cnt = 0
        # 행의 끝이 1로 끝났을 때 넣을 수 있는 단어값이 k 와 같다면
        if cnt == k:
            possible += 1         # k길이 단어를 넣을 수 있는 횟수 증가

    # 열방향이 K 일때 cnt 구하기
    for i in range(n):
        cnt = 0
        for j in range(n):
            if puzzle[j][i]:
                cnt += 1
            else:
                if cnt == k :
                    possible += 1
                cnt = 0
        if cnt == k:
            possible += 1

    print(f'#{tc} {possible}')

N X N 크기의 단어 퍼즐에서 특정 길이 K를 갖는 단어가 들어갈 수 있는 자리의 수를 출력하는 프로그램이다.

possible 이라는 변수는 길이가 K인 단어가 들어갈 수 있는 자리의 수를 출력하기 위한 변수이다.

퍼즐은 행방향과 열방향을 구분해서 계산하였다.

먼저 행방향을 보면 2중 for문을 사용했다. K의 값과 일치하는지 비교하기 위해 cnt라는 변수를 첫번째 for문 밑에 초기화 시켜주었고, puzzle의 위치값이 1이면 cnt를 증가시키고, 0이라는 벽을 만나거나 행의 끝이 1로 끝났을 때의 K값과 cnt값을 비교해서 같으면 possible의 값을 1 증가시켜주었다.

열방향에서도 행방향과 같이 적용시켜 주었다.

좋은 웹페이지 즐겨찾기