Stay Hungry Stay Foolish

SWEA

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

dev스카이 2024. 10. 22. 18:09

[문제 링크] 👇

 

SW Expert Academy

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

swexpertacademy.com


 

풀이

가로 회문 검사

for i in range(8):
    for j in range(8 - length + 1):
    	row_slice = board[i][j:length + j]
        if row_slice == row_slice[::-1]:
            result += 1
  • 가로 방향으로 회문을 찾는 루프이다.
  • for i in range(8)
    • 글자판의 각 행(i번째 행)을 순차적으로 확인한다.
  • for j in range(8 - length + 1)
    • 각 행에서 length 길이의 문자열을 추출할 시작 인덱스 j 를 설정한다.
    • 8 - length + 1은 회문을 추출할 수 있는 시작 지점의 범위를 설정한다. (예를 들어, length가 4일 경우, 가능한 시작 인덱스는 0부터 4까지.)
  • row_slice = board[i][j:j + length]
    • board[i]의 j번째 위치에서 length만큼 자른 문자열을 row_slice에 저장한다.
  • if row_slice == row_slice[::-1]
    • row_slice가 뒤집은 값과 동일한지 확인하여 회문인지 검사. 회문이라면 result를 1 증가시킨다.

 

세로 회문 검사

for i in range(8):
    for j in range(8 - length + 1):
        col_slice = ''.join(board[j + k][i] for k in range(length))
        if col_slice == col_slice[::-1]:
            result += 1
  • 세로 방향으로 회문을 찾는 루프이다.
  • for i in range(8)
    • 글자판의 각 열(i번째 열)을 순차적으로 확인한다.
  • for j in range(8 - length + 1)
    • 각 열에서 length 길이의 문자열을 추출할 시작 인덱스 j를 설정합니다.
  • col_slice = ''.join(board[j + k][i] for k in range(length))
    • j에서 시작하여 length 길이만큼 세로로 내려가면서 각 행에서 i번째 열의 글자를 추출하여 col_slice에 문자열로 저장한다.
    • ''.join()을 사용해 추출한 글자들을 하나의 문자열로 합친다.
  • if col_slice == col_slice[::-1]
    • col_slice가 뒤집은 값과 동일한지 확인하여 회문인지 검사한다. 회문이라면 result를 1 증가시킨다.

 

 

Solution

for tc in range(1, 11):
    length = int(input()) #회문 길이
    board = [input().strip() for _ in range(8)]
    result = 0 #결과
    #가로 확인
    for i in range(8):
        for j in range(8 - length + 1): #length가 4면 (0, 5)
            row_slice = board[i][j:length + j]
            if row_slice == row_slice[::-1]:
                result += 1
    #세로 확인
    for i in range(8):
        for j in range(8 - length + 1):
            col_slice = ''.join(board[j + k][i] for k in range(length))
            if col_slice == col_slice[::-1]:
                result += 1

    print("#%d %d" % (tc, result))

 

 

👩‍💻 회고

아.. 정말 화딱지 나는 문제였다. 가로까지는 문제없었는데 세로를 확인할 때 슬라이싱이 안 된다는 걸 늦게 깨달아서 시간을 많이 썼다. 다음에 다시 풀어봐야 할 문제이다.