SWEA 1979.어디에 단어가 들어갈 수 있을까(파이썬)

비만다람쥐·2024년 4월 28일
0
post-custom-banner

문제

문제바로가기

1.N * N 크기의 단어 퍼즐 모양에서 특정 길이 K를 갖는 단어가 들어갈 수 있는 자리의 수를 출력하는 프로그램을 작성한다

접근하기

1.처음에 나는 접근할때 가로 세로로 완전 탐색을 하려했다
2.완전 탐색을 하던 도중 배열의 끝 인덱스에 도달하는것은 생각을 못하고
0을 만나게 되는 경우 sum == k 이면 result 에 1을 더하고 아닌 경우에는 sum 을 0으로 초기화했는데 여기서 작은 오류가 발생하였다
3.결국 이 문제의 핵심은 가로 세로 완전 탐색을 하는데 조건이 중요하였다
-> 1. 배열 끝의 인덱스에 도달하거나 0을 만나면 sum에 있는 숫자를 확인한다
-> 2. sum이 k의 숫자와 일치하면 k를 갖는 단어가 들어갈 수 있다는 뜻이므로 result에 1을 추가한다
-> 3. sum이 k의 숫자와 일치하지 않으면 k의 숫자가 딱 들어가지 못하기 때문에 sum을 초기화 해준다

코드

T = int(input())

for t in range(1,T+1):
    n,k = map(int,input().split())
    arr = [list(map(int,input().split())) for _ in range(n)]
    result = 0

    for i in range(n):
        sum = 0
        # 가로 방향으로 
        for j in range(n):
            if arr[i][j] == 1:
                sum += 1
            if arr[i][j] == 0 or j == n-1:
                if sum == k:
                    result += 1
                sum = 0
        # 세로 방향으로
        for j in range(n):
            if arr[j][i] == 1:
                sum += 1
            if arr[j][i] == 0 or j == n-1:
                if sum == k:
                    result += 1
                sum = 0
    
    print(f'#{t} {result}')

생각하기

i가 무조건 세로를 뜻하는게 아니라 arr[][] 에서 arr[i][] 가 들어가면 i가 세로를 나타내는거고 arr[j][i] 이면 j가 세로를 나타내는거다 무조건 i가 세로를 나타낸다는 선입견을 버리자

profile
개발자가 되고싶은 사람
post-custom-banner

0개의 댓글