새소식

Computer Science/코딩테스트 문제 풀이

[예제] [파이썬] [탐색] 격자판 회문수

  • -

1부터 9까지의 자연수로 채워진 N*N 격자판이 주어지면 격자판 위에서 가로방향 또는
세로방향으로 길이 5자리 회문수가 몇 개 있는지 구하는 프로그램을 작성하세요.
회문수란 121과 같이 앞에서부터 읽으나 뒤에서부터 읽으나 같은 수를 말합니다.

 

 

빨간색처럼 구부러진 경우(87178)는 회문수로 간주하지 않습니다.


▣ 입력설명
1부터 9까지의 자연수로 채워진 N*N격자판이 주어집니다.


▣ 출력설명
M자리 회문수의 개수를 출력합니다.


▣ 입력예제 1
7 5
2 4 1 5 3 2 6
3 5 1 8 7 1 7
8 3 2 7 1 3 8
6 1 2 3 2 1 1
1 3 1 3 5 3 2
1 1 2 5 6 5 2
1 2 2 2 2 1 5


▣ 출력예제 1
3

 


 

import sys
sys.stdin=open('input.txt','r')


if __name__=="__main__":
    N,M=map(int, input().split())       # NxN 격자, m자리 회문수
    board=[list(map(int, input().split())) for _ in range(N)]
    
    cnt=0
    for j in range(N-M+1):      # 0,1,2만 확인해도 0-4, 1-5, 6-7로 7을 모두 확인할 수 있다.
        for i in range(N):          # 1. 행 확인 
            tmp=board[i][j:j+M]
            if tmp==tmp[::-1]:
                cnt+=1
        
            # 이제 열 5개 요소를 확인한다. 열은 슬라이싱으로 확인 못하기 때문에 for문으로 확인한다.
            for k in range(M-(N-M+1)):   # 2. 열 확인, 
                if board[j+k][i]!=board[j+M-k-1][i]:    # 대칭 반대되는 요소가 서로 다르면 
                    break                               # 볼것도 없이 다음 위치 확인
        cnt+=1                                      # 열 확인했는데 문제 없으면 +1
                    
    print(cnt)
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.