알고리즘/인프런: 파이썬 알고리즘 문제풀이

탐색&시뮬레이션 문제 #11. 격자판 회문수

bearbrick 2022. 6. 1. 03:40

*이 풀이는 인프런: 파이썬 알고리즘 문제풀이 강좌에 기반하였습니다.

 

 

 

내 풀이

 

1. 행과 열 각각에서 격자판 회문수를 세기 위해 num1과 num2배열을 만든다. 이 배열을 갱신하는 것이 관건이다.

2. 배열의 크기가 5가 될때까지는 num1과 num2에 값을 삽입한다.

3. 이후부터는 배열의 첫번째 값을 빼고, 새로운 값을 뒤에 삽입해주면서 갱신한다.

4. 다음 행 또는 열로 넘어가면 배열을 초기화하고, 다시 값을 삽입하면서 갱신한다.

 

import sys
#sys.stdin=open("input.txt","rt")

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

for i in range(7):
    num1=[]
    num2=[]
    for j in range(7):
        num1.append(arr[i][j])
        num2.append(arr[j][i])
        if j>=4:
            if j>=5:
                num1.pop(0)
                num2.pop(0)
            if (num1[0]==num1[4] and num1[1]==num1[3]) or (num2[0]==num2[4] and num2[1]==num2[3]):
                cnt+=1

print(cnt)

 

 

 

강사님 풀이

 

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):     # i : 열
    for j in range(7): # j : 행
        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)