본문 바로가기
알고리즘/SWEA

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

by sang-rak 2021. 2. 20.
반응형

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

 

SW Expert Academy

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

swexpertacademy.com

 

1. nomal

T = int(input())

for tc in range(1, T+1):
    # N: 2차원 리스트 크기, K: 내가 원하는 길이
    N, K = map(int, input().split())

    #리스트 내포 방식을 활용한 입력
    puzzle = [list(map(int, input().split())) for _ in range(N)]

    ans = 0

    for i in range(N):
        cnt = 0
        # 행을 검사
        for j in range(N):
            if puzzle[i][j] == 1:
                cnt += 1
            if puzzle[i][j] == 0 or j == N-1:
                # 벽을 만났을 때 그동안 쌇아온 cnt 값이 k이면 들어갈 수 있다.
                if cnt == K:
                    ans += 1
                cnt = 0

        # 열을 검사
        for j in range(N):
            if puzzle[j][i] == 1:
                cnt += 1
            if puzzle[j][i] == 0 or j == N-1:
                if cnt == K:
                    ans += 1
                cnt = 0
    print("#{} {}".format(tc, ans))

 

2. 가벽을 세우는 방법 (수정예정)

 

# 가벽을 세우는 방법
for tc in range(1, T+1):
    N, K = map(int, input().split())

    puzzle = [list(map(int, input().split())) + [0] for _ in range(N)]
    puzzle.append([0]*(N+1))
    ans = 0
    for i in puzzle:
        cnt = 0
        # 벽을 한칸 더 둘렀기 때문에 증가
        for j in range(N+1):
            if puzzle[i][j]:
                cnt += 1

            else:
                if cnt == K:
                    ans += 1
                cnt = 0

        # 열 우선 순회
        for j in range(N+1):
            if puzzle[j][i]:
                cnt += 1
            else:
                if cnt == K:
                    ans += 1
                cnt = 0
    print("#{} {}".format(tc, ans))
반응형

댓글