본문 바로가기

코딩테스트/SWEA

[SWEA] 1215 : 회문1 (파이썬)

문제

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14QpAaAAwCFAYi&categoryId=AV14QpAaAAwCFAYi&categoryType=CODE&problemTitle=%ED%9A%8C%EB%AC%B8&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

 

SW Expert Academy

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

swexpertacademy.com


코드

def count(arr):
    cnt = 0
    for i in range(8):
        for j in range(8 - N + 1):
            temp = [] # 중간에 temp변수 초기화 필요
            for n in range(N):
                temp.append(arr[i][j + n]) #j좌표에 0-n만큼 더한 범위
            if temp[::-1] == temp:
                cnt += 1
    return cnt


for t in range(1, 10 + 1):
    N = int(input())
    arr = [list(map(str, input())) for _ in range(8)]
    arr_ = list(zip(*arr)) # 전치행렬

    res = count(arr) + count(arr_)
    print('#{} {}'.format(t, res))

전치행렬

  • 행과 열이 바뀐 배열 
  • list(zip(*arr)) => 2차원 리스트 안의 i번째 리스트의 각 j번째 요소를 뽑아서 한 리스트로 묶어줌 
  • list(map(list, zip(*arr))) => zip함수 사용시 튜플 반환이므로 안에 요소도 리스트로 바꾸고 싶다면 map() 활용

format()

  • print( '{} {}'.format(변수, or 식) )