본문 바로가기
TIL - 프로그래밍/Python 알고리즘

[SWEA] 1979. 어디에 단어가 들어갈 수 있을까 - Python

by chaemj97 2022. 2. 20.
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PuPq6AaQDFAUq 

 

SW Expert Academy

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

swexpertacademy.com

 

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

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

[예제]

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

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


< ❓ 생각 >


< 💻 코드 >

def count_arr(N):
    sol = 0
    for i in range(N + 1):
        cnt = 0
        for j in range(N + 1):
            # 1이면 cnt 추가
            if arr[i][j] == 1:
                cnt += 1
            # 0이면 길이 확인하기
            else:
                # 길이가 K이면 단어 들어갈 수 있음
                if cnt == K:
                    sol += 1
                cnt = 0
    return sol

# 테스트 케이스 개수
T = int(input())
for tc in range(1,T+1):
    # N*N 크기의 단어 퍼즐, K : 단어의 길이
    N, K = map(int,input().split())
    # 0 추가
    arr = [list(map(int,input().split())) + [0] for _ in range(N)]
    arr.append([0]*(N+1))
    # 행방향 체크
    sol = count_arr(N)
    # 열방향 체크
    # 전치행렬
    arr = list(map(list,zip(*arr)))
    sol += count_arr(N)
    print(f'#{tc} {sol}')


< ❗ >

행렬의 오른쪽과 아래에 0 추가

arr = [list(map(int,input().split())) + [0] for _ in range(N)]
arr.append([0]*(N+1))

전치행렬

arr = list(map(list,zip(*arr)))
728x90
반응형

댓글