[SWEA][Python]#1216. 회문2
📌풀이
내가 쓴 풀이(성공)
-
회문인지 판단하는 함수
palindrome
input: word(단어), m(단어의 길이)
output:
True
orFalse
단어의 앞쪽 인덱스와 뒷쪽 인덱스의 값을 비교하며 일치 여부 확인
-
가로줄을 확인하기 위한 배열
words
-
세로줄을 확인하기 위한 배열
words_h
words
를 활용하여 생성words
의 각 문자열의 같은 인덱스들을 합쳐 하나의 문자로 만들고, 저장(zip
과*
활용) -
단어의 길이
m
을 변수로 설정최대길이인 100부터 시작하여 1씩 줄이며 확인(회문을 찾는 경우 즉시 종료하게 하기 위함)
-
가로줄, 세로줄에서 슬라이싱한 단어가 회문이라는 것이 확인되면,
flag
를 통해 for문 밖으로 나오게 만듦,res
에 해당 길이 저장 후 for문 마친 상태에서 출력
# 회문인지 확인하는 함수
def palindrome(word, m):
for i in range(m//2):
if word[i] != word[-1-i]:
return False
return True
for _ in range(1, 11):
tc = int(input())
n = 100
words = []
# 가로를 분석하기 위한 words
# 세로를 쉽게 분석하기 위한 words_h
for _ in range(n):
words.append(input())
words_h = [''.join(i) for i in zip(*words)]
res = 1
flag = False
#효율을 위해 큰 값에서 작은값으로 진행
for m in range(100, 1, -1):
for i in range(n):
for j in range(n-m+1):
# 가로 또는 세로에 회문이 있다면, 저장 후 for문 종료
if palindrome(words[i][j:j+m], m) or palindrome(words_h[i][j:j+m], m) :
res, flag = m, True
break
if flag :
break
if flag :
break
print(f'#{tc} {res}')
📌후기
투박하게 짰다가 에러가 떴었던 문제였다. 세로줄을 그냥 for문을 확인해서 하면 된다고 생각했는데, 메모리 에러가 떠서 그냥 세로줄을 위한 배열을 새로 생성하여 구현하였다. 배열이 길어지면서 효율을 고려할 수 있는 문제였고, 여러 효율적인 코드를 짜는 방안을 생각할 수 있어서 좋은 문제라고 생각한다.
Author And Source
이 문제에 관하여([SWEA][Python]#1216. 회문2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mein-figur/SWEAPython1216.-회문2저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)