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
#import sys
#sys.stdin = open('in.txt', 'rt')
a = [list(map(int, input().split())) for _ in range(7)]
cnt = 0
for i in range(7):
for j in range(3):
for k in range(2):
if a[i][j+k] != a[i][j+4-k]:
break
else:
cnt += 1
# 하나의 for문으로 가로/세로 모두 처리 가능.
for k in range(2):
if a[j+k][i] != a[j+4-k][i]:
break
else:
cnt += 1
print(cnt)
다른 방식으로 풀이(for문 대신에 역 슬라이스와 제너레이터를 이용하여 풀기)
#import sys
#sys.stdin = open('in.txt', 'rt')
a = [list(map(int, input().split())) for _ in range(7)]
cnt = 0
for i in range(7):
for j in range(3):
# for문 또는 역슬라이스 방식 비교 코딩
tmp = a[i][j:j+5]
if tmp == tmp[::-1]:
cnt += 1
# for k in range(2):
# if a[i][j+k] != a[i][j+4-k]:
# break
# else:
# cnt += 1
# if all & 제너레이터 또는 for문 방식 비교 코딩
if all(a[j+k][i] == a[j+4-k][i] for k in range(2)):
cnt += 1
# for k in range(2):
# if a[j+k][i] != a[j+4-k][i]:
# break
# else:
# cnt += 1
print(cnt)
if all 에서 사용한 for 문이 제너레이터인지 확인하는 방법
'Algorithm > Python' 카테고리의 다른 글
023 - 랜선자르기(결정알고리즘) (0) | 2023.08.09 |
---|---|
022 - 이분검색 (0) | 2023.08.09 |
020 - 스도쿠 검사 (0) | 2023.08.09 |
019 - 봉우리 (1) | 2023.08.09 |
018 - 곳감(모래시계) 합계 (0) | 2023.08.08 |