문제
1부터 9까지의 자연수로 채워진 7*7 격자판이 주어지면 격자판 위에서 가로방향 또는 세로방향으로 길이 5자리 회문수가 몇 개 있는지 구하는 프로그램을 작성하세요. 회문수란 121과 같이 앞에서부터 읽으나 뒤에서부터 읽으나 같은 수를 말합니다.
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 |
빨간색처럼 구부러진 경우(87178)는 회문수로 간주하지 않습니다.
입력
1부터 9까지의 자연수로 채워진 7*7격자판이 주어집니다.
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 |
출력
5자리 회문수의 개수를 출력합니다.
3 |
답
li = [list(map(int, input().split())) for _ in range(7)]
cnt = 0
for i in range(7):
for j in range(3):
li_rt = li[i][j:j + 5]
if li_rt == li_rt[::-1]:
cnt += 1
li_ct = []
for k in range(5):
li_ct.append(li[j + k][i])
if li_ct == li_ct[::-1]:
cnt += 1
print(cnt)
📄 다른 풀이
li = [list(map(int, input().split())) for _ in range(7)]
cnt = 0
for i in range(3):
for j in range(7):
li_t = li[j][i:i + 5]
if li_t == li_t[::-1]:
cnt += 1
for k in range(2):
if li[i + k][j] != li[i + 5 - k - 1][j]:
break
else:
cnt += 1
print(cnt)
'Python > 알고리즘' 카테고리의 다른 글
[Python/알고리즘] 랜선 자르기(결정 알고리즘) (0) | 2022.10.31 |
---|---|
[Python/알고리즘] 이분 검색 (0) | 2022.10.31 |
[Python/알고리즘] 스도쿠 검사 (0) | 2022.10.27 |
[Python/알고리즘] 봉우리 (0) | 2022.10.27 |
[Python/알고리즘] 곳감 (0) | 2022.10.27 |
댓글