SWExpert/D3

[D3] 1215. [S/W 문제해결 기본] 3일차 - 회문1 (Python 파이썬 풀이)

MakeMoneying 2020. 9. 11. 00:22

[D3] 1215. [S/W 문제해결 기본] 3일차 - 회문1 (Python 파이썬 풀이)

출처

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14QpAaAAwCFAYi&categoryId=AV14QpAaAAwCFAYi&categoryType=CODE

문제

"기러기" 또는 "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

 

 

출처

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14QpAaAAwCFAYi&categoryId=AV14QpAaAAwCFAYi&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com