728x90
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PuPq6AaQDFAUq
< 📝 문제 >
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
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[SWEA] 1859. 백만 장자 프로젝트 - Python (0) | 2022.02.20 |
---|---|
[SWEA] 1974. 스도쿠 검증 - Python (0) | 2022.02.20 |
[SWEA] 2001. 파리 퇴치 - Python (0) | 2022.02.20 |
[SWEA] 5356. 의석이의 세로로 말해요 - Python (0) | 2022.02.20 |
[SWEA] 5432. 쇠막대기 자르기 - Python (0) | 2022.02.20 |
댓글