
[내 코드]
a=0
text = input()
num = len(text)
for i in range(num):
if text[i] == text[num-i-1]:
a=1
else:
a=0
print(a)
[정답]
text = input()
num = len(text)
is_palindrome = 1 # 팰린드롬 여부를 저장하는 변수
for i in range(num // 2): # 문자열의 절반만 확인하면 충분합니다
if text[i] != text[num - i - 1]:
is_palindrome = 0 # 매칭되지 않는 경우, 팰린드롬이 아님
break # 더 이상 확인할 필요가 없으므로 반복문을 종료합니다
print(is_palindrome)
우선 내 코드는 문자 전체를 for문을 돌린다는 점에서 비효율적이다.
또 종료조건이 없기 때문에 for문을 돌렸을 때 마지막만 같으면 1이라고 출력하는 문제가 생긴다. ex)dljkjld
[파이썬 특화코드]
text = input()
is_palindrome = text == text[::-1] # 문자열을 뒤집어서 원본과 비교
print(int(is_palindrome)) # 불리언 값을 정수로 변환하여 출력
파이썬은 슬라이싱에 최적화 되어있다. 따라서 다음과 같이 문자열 슬라이싱을 사용해도 굉장히 빠르다
여기에 불리언 값을 사용하는건 상상도 못했다.
깨달은 점
1. 대칭의 경우 전체를 살펴보지 않고 절반만 살펴봐도 되는 경우가 있다.
2. for 문의 경우 종료조건에 대해 생각하자
3. 변수명을 좀 더 직관적으로 만들 필요가 있다
4. 파이썬 슬라이싱에 익숙해질 필요가 있다.
5. 불리언 값에 int()를 적용시키면 0과 1로 바뀐다
6. 0,1 로 나뉘는건 불리언 값을 사용할 수 있다는 것을 명심하자