새소식

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

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

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