파이썬 알고리즘

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

뜻 지, 깨달음 오 2022. 9. 22. 17:38

https://swexpertacademy.com/main/talk/solvingClub/problemView.do?solveclubId=AYJ7KE5qKy8DFASv&contestProbId=AV5PuPq6AaQDFAUq&probBoxId=AYKLHkm6QIwDFAVG&type=PROBLEM&problemBoxTitle=3.+list+%EC%B6%94%EA%B0%80%EB%AC%B8%EC%A0%9C&problemBoxCnt=4 

 

SW Expert Academy

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

swexpertacademy.com

 

배열에서 딱 K길이만큼 1인 것들을 찾아야한다.

total을 총 단어 개수로 하고,

cnt를 그 줄의 1의 개수로 두면서 계속 초기화를 시켜줬다.

 

    #가로
    for i in range(N):
        cnt = 0
        for j in range(N):
            if arr[i][j]==0 and cnt==K:
                total +=1
                cnt = 0
            elif arr[i][j]==0:
                cnt = 0
            elif arr[i][j] == 1:
                cnt += 1
                if cnt==K and j==N-1:
                    total+=1
                    cnt = 0

다른 부분은 쉬우니까 가로 판별하는 부분만 일단 설명을 하자면, 

가로 줄이 바뀔때마다 일단 cnt를 초기화시켜준다

그리고 배열 값이 1이면 cnt에 1을 더한다.

이제 0을 만났을때랑

가로줄 끝까지 갔을때의 상황에서 어떻게 할건지 정해주면 된다.

 

1) 0을 만났는데, 이전 K개의 칸들이 모두 1일 경우

total에 1을 더하고 cnt를 0으로 초기화시킨다.

 

2)그 외 0을 만난 경우

 cnt 를 0으로 초기화시킨다.

 

3) 배열 값이 1일때 cnt에 1을 추가한다

          이때, 지금 내가 보고있는 칸이 줄의 맨 마지막칸이면,

           지금 칸까지의 cnt가 K인지 확인해주고, total값에 추가한다.

 

 

전체코드)

T = int(input())

for tc in range(1, 1+T):
    N, K = map(int, input().split())
    arr = [list(map(int, input().split())) for _ in range(N)]
    total = 0


    #가로
    for i in range(N):
        cnt = 0
        for j in range(N):
            if arr[i][j]==0 and cnt==K:
                total +=1
                cnt = 0
            elif arr[i][j]==0:
                cnt = 0
            elif arr[i][j] == 1:
                cnt += 1
                if cnt==K and j==N-1:
                    total+=1
                    cnt = 0

    #세로
    for i in range(N):
        cnt = 0
        for j in range(N):
            if arr[j][i]==0 and cnt==K:
                total +=1
                cnt = 0
            elif arr[j][i]==0:
                cnt = 0
            elif arr[j][i] == 1:
                cnt += 1
                if cnt==K and j==N-1:
                    total +=1
                    cnt  = 0


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