본문 바로가기
알고리즘?/기본3 탐색&시뮬레이션(string, 1차원 2차원 리스트 탐색)

11. 격자판 회문수 이해 못함

by 몰라닉네임 2023. 5. 12.

[문제설명]

 

[문제 격자판 회문수]

1부터 9까지의 자연수로 채워진 7*7 격자판이 주여지면 격자판 위에서 가로방향 또는 세로방향으로 길이 5자리 회문수가 몇개 있는지 구하는 프로그램을 작성하세요.

회문수란 121과 같이 앞에서 읽으나 뒤에서부터 읽으나 같은 수를 말합니다. 

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

 

-입력설명

1부터 9까지의 자연수로 채워진 7*7 격자판이 주어집니다.

 

-출력설명

5자리 회문수의 개수를 출력합니다.

 

-입력예제1

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

 

[풀이]

0 1 2 3 4 5 6 (인덱스)

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. 행 회문탐색은 일반 회문검사 하듯이 s==s[::-1]

2. 열 회문탐색은

0 1 2 3 4   행 비교 , 

2

3

8

6

1

1 2 3 4 5 행 비교

2 3 4 5 6 행 비교 

1 과 5, 2 와 4  s[i+k][j]==s[i+5-k-1][j]

....

i= 0 , j=0 일 때 

k=0 이면 s[0][0], s[4][0]

k=1 이면 s[1][0]==s[3][0]

...

import sys
sys.stdin=open("input.txt", "rt")
board=[list(map(int, input().split())) for _ in range(7)]
cnt=0
for i in range(3):
    for j in range(7):
        tmp=board[j][i:i+5]
        if tmp==tmp[::-1]:
            cnt+=1
        for k in range(2):
            if board[i+k][j]!=board[i+5-k-1][j]:
                break
        else:
            cnt+=1
print(cnt)