SSAFY/SWEA

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

728x90
반응형

풀기 전 생각해보기😮

  • 이차원 배열 : 가로 방향, 세로 방향 탐색
  • 퍼즐 공간이 세 글자일 때 vs 네 글자일 때 : ex) 0 0 0 1 1 vs 0 0 0 0 1 구분
  • 퍼즐 내의 공간일 때 vs 퍼즐 경계가 포함된 공간일 때 : ex) 0 1 1 1 0 vs 0 0 1 1 1 구분 

 


풀이🛫

T = int(input())
for _ in range(T):
	# N: 정사각형 퍼즐의 크기, K: 특정 단어 길이
    N, K = map(int, input().split())
    puzzle = [list(map(int, input().split())) for i in range(N)]

    fnd = 0
    
    # 가로 기준 탐색
    for i in range(N):
        l = 0
        for j in range(N):
            if puzzle[i][j] == 1:
                l += 1
                if j == N-1:
                    if l == K:
                        fnd += 1
            elif puzzle[i][j] == 0:
                if l == K:
                    fnd += 1
                l = 0

    # 세로 기준 탐색
    for i in range(N):
        l = 0
        for j in range(N):
            if puzzle[j][i] == 1:
                l += 1
                if j == N-1:
                    if l == K:
                        fnd += 1
            elif puzzle[j][i] == 0:
                if l == K:
                    fnd += 1
                l = 0

    print("#"+str(_+1), fnd)
  • 퍼즐의 가로 방향과 세로 방향을 기준으로 완전 탐색하는 풀이를 계획했다.
  • 다만, 글자 길이(l)이 3일 때 찾았다고(fid) 하기에는 예외(글자 길이가 4일 경우) 가 발생했다.
  • 따라서 글자 길이를 탐색이 중단되는 시점으로 나누어 각각의 조건문을 활용했다.
    • 1) 값이 1일 때 인덱스가 경계값인 경우
    • 2) 값이 0일 경우 

 

핵심 정리🎁

for j in range(N):
    if puzzle[i][j] == 1:
        l += 1
        if j == N-1:
            if l == K:
                fnd += 1
    elif puzzle[i][j] == 0:
        if l == K:
            fnd += 1
        l = 0
  • 항상 배열의 인덱스 번호에 주의하도록 하자.
    j == N으로 설정하고 왜 출력값이 제대로 나오지 않는 지 생각하면서 시간을 많이 소비했다.

 

링크💎

 

SW Expert Academy

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

swexpertacademy.com

 

후기 😎

  • 이차원 배열 알고리즘 문항 단련하기..!