알고리즘/인프런: 파이썬 알고리즘 문제풀이
탐색&시뮬레이션 문제 #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)