[D3] 1215. [S/W 문제해결 기본] 3일차 - 회문1 (Python 파이썬 풀이)
출처
문제
"기러기" 또는 "level" 과 같이 거꾸로 읽어도 앞에서부터 읽은 것과 같은 문장이나 낱말을 회문(回文, palindrome)이라 한다.
주어진 8x8 평면 글자판에서 가로, 세로를 모두 보아 제시된 길이를 가진 회문의 총 개수를 구하는 문제이다.
제약사항
각 칸의 들어가는 글자는 c언어 char type으로 주어지며 'A', 'B', 'C' 중 하나이다.
글자 판은 무조건 정사각형으로 주어진다.
ABA도 회문이며, ABBA도 회문이다. A또한 길이 1짜리 회문이다.
가로, 세로 각각에 대해서 직선으로만 판단한다.
입력
각 테스트 케이스의 첫 번째 줄에는 찾아야 하는 회문의 길이가 주어지며, 다음 줄에 테스트 케이스가 주어진다.
총 10개의 테스트 케이스가 주어진다.
출력
#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 찾은 회문의 개수를 출력한다.
입력 | 출력 |
---|---|
4 CBBCBAAB CCCBABCB CAAAACAB BACCCCAC AABCBBAC ACAACABC BCCBAABC ABBBCCAA 4 BCBBCACA BCAAACAC ABACBCCB AACBCBCA ACACBAAA ACCACCCB AACAAABA CACCABCB ... |
#1 12 #2 10 ... |
문제 해석
2차원 행렬로 받아서 생각해보자. 회문의 길이는 입력값에서 주어지니 N이라고 하자. 각 줄에는 8개의 단어가 있으므로 우리는 x값이 0일때부터 (8-N)까지 보면서 회문인지 아닌지 측정하면 되는 것이다. 예로, 첫번째 테스트 케이스에서는 N을 4로 주어졌으니 가로 회문을 찾는다면, x의 인덱스르 0부터 4까지 보면 된다.
문제는 가로 회문을 볼 때에는 y값은 0부터 7까지, x값은 0부터 4(이 값은 8-N)까지여야 하고, 세로 회문을 볼 때에는 y값은 0부터 4까지이여야 하므로 따로 따로 확인을 할 것이다.
문제 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
for Count in range(10):
N = int(input())
List = list(input() for _ in range(8))
Answer = 0
# 가로 확인
for y in range(8):
for x in range(8-N+1):
A = List[y][x:x+N]
if A == A[::-1]:
Answer += 1
# 세로 확인
for y in range(8-N+1):
for x in range(8):
A = ''
for z in range(N):
A += List[y+z][x]
if A == A[::-1]:
Answer += 1
print("#{} {}".format(Count+1,Answer))
|
cs |
출처
'SWExpert > D3' 카테고리의 다른 글
[D3] 1213. [S/W 문제해결 기본] 3일차 - String (0) | 2020.09.10 |
---|---|
[D3] 2005. 파스칼의 삼각형 (0) | 2020.09.07 |
1209. [S/W 문제해결 기본] 2일차 - Sum (Python 파이썬 풀이) (0) | 2020.09.04 |
[D3] 1206. [S/W 문제해결 기본] 1일차 - View (Python 파이썬 풀이) (0) | 2020.09.02 |
[D3] 3142. 영준이와 신비한 뿔의 숲(Python 파이썬 풀이) (0) | 2020.09.01 |