격자판 회문수

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

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

 

▣ 입력설명

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


코드1

arr = [list(map(int, input().split())) for _ in range(7)]
cnt = 0

for i in range(7):
    for j in range(3):
        a = []
        b = []
        for k in range(j,j+5):
            a.append(arr[i][k])
            b.append(arr[k][i])
        if a==a[::-1]:
            cnt+=1
        if b==b[::-1]:
            cnt+=1
print(cnt)

 

0행~7행, 0열~7열 까지 돌게 하기위해 7번 반복하고,

0번째부터 5번째까지, 1번째부터 6번째까지, 2번째부터 7번째까지 반복하여

행을 읽고, 열을 읽어서 각각의 리스트에 추가해준다.

 

원래 리스트와 리스트를 거꾸로 했을때와 비교하여,

같으면 카운트 해준다.

 


코드2

arr = [list(map(int, input().split())) for _ in range(7)]
cnt = 0

for i in range(3):
    for j in range(7):
        tmp = arr[j][i:i+5] # 행은 슬라이스가 된다
        if tmp==tmp[::-1]:
            cnt+=1
        for k in range(2): # 열은 슬라이스가 안되므로 for문으로 해결한다.
            if arr[i+k][j] != arr[i+5-k-1][j]: # 처음와 끝만 비교
                break
        else:
            cnt+=1

print(cnt)

행은 슬라이스로 나눠서 비교하고

열은 처음과 끝만 비교하는 방법이 있다.

'⏰ 코딩테스트 > 리스트 탐색' 카테고리의 다른 글

스도쿠 검사  (0) 2021.10.03
봉우리  (0) 2021.09.30
곳감(모래시계)  (0) 2021.09.29
사과나무(다이아몬드)  (0) 2021.09.28
격자판 최대합  (0) 2021.09.27
복사했습니다!