[LeetCode_125] 유효한 팰린드롬

2022. 2. 6. 16:32· #️⃣ Project 및 개발일지/Algorithm 문제 풀이
목차
  1. # 문제 설명 

파이썬으로 배우는 알고리즘 책을 공부하며 풀었던 LeetCode문제들을 재정리해보자.

 

# 문제 설명 

125번 Valid Palindrome은 주어진 문자열이 팰린드롬인지 확인하는 문제이다.

단 알파벳인것만 취급하며, 대소문자 구분 없이 모두 소문자로 바꿔서 평가함.

 

* 펠린드롬 : 앞뒤가 똑같은 단어나 문장 

 

 

# 풀이방법 1 - 단순 list와 for문으로 판별

class Solution:
    def isPalindrome(self, s: str) -> bool:
        
        check = []

        for c in s :
            if c.isalpha() or c.isdigit():
                check.append(c.lower())
    
        check_len = len(check)
       
        if check_len == 0 :
            return True
        
        for i in range(0, check_len//2 + 1):
            if check[i] != check[check_len-1-i] :
                return False
            
        return True

1. 문자열에서 한 문자씩 alpha이거나 digit인지 구분하여 배열에 저장한다.

2. 1에서 저장한 배열의 길이가 0이면 무조건 true 를 반환하도록 함

3. (핵심) 문자열의 길이의 1/2 만큼 for문을 돌며, 첫번째 글자[i]와 마지막 check_len-i번째 글자가 같은지 비교하여 다르면 false를 반환하도록 하였다.

 

 

# 풀이 방법 2 - deque를 이용하여 판별 (책 풀이 참고)

class Solution:
    def isPalindrome(self, s: str) -> bool:
        
        check : Deque = collections.deque()

        for c in s :
            if c.isalnum() :
                check.append(c.lower())
    
        while len(check) > 1 :
            if check.popleft() != check.pop():
                return False
    
        return True

1. 알파벳인지 숫자인지 .isalnum 함수를 이용하여 확인 후 deque에 저장함 

2. deque의 길이가 1이상일 경우에만 왼쪽과 오른쪽의 문자열을 하나씩 pop하며 같은지 비교함 

 

| 핵심 |

.isalnum()

check : Deque = collections.deque()

check.popleft(), check.pop() 

 

 

# 풀이 방법 3 - 정규식과 [::-1] 이용 (책 풀이 참고)

class Solution:
    def isPalindrome(self, s: str) -> bool:
        
        s = s.lower()
        
        # 정규식 이용 
        s = re.sub('[^a-z0-9]', '', s)
        
        # 리스트 뒤집어 비교
        return s == s[::-1]

1. 소문자로 바꾼후 정규식을 용하여 불필요한 문자를 필터링함

2. [::-1]로 리스트를 뒤집어 비교한다. 

 

| 핵심 |

res.sub('[^a-z0-9]', '',s)

s[::-1]

 

 

# 결과 

'#️⃣ Project 및 개발일지 > Algorithm 문제 풀이' 카테고리의 다른 글

[LeetCode_238] 자신을 제외한 배열의 곱  (0) 2022.02.06
[LeetCode_5] 가장 긴 팰린드롬 부분 문자열  (0) 2022.02.06
[LeetCode_49] 그룹 애너그램  (0) 2022.02.06
[LeetCode_937] 로그파일 재정렬  (0) 2022.02.06
[LeetCode_344] 문자열 뒤집기  (0) 2022.02.06
  1. # 문제 설명 
'#️⃣ Project 및 개발일지/Algorithm 문제 풀이' 카테고리의 다른 글
  • [LeetCode_5] 가장 긴 팰린드롬 부분 문자열
  • [LeetCode_49] 그룹 애너그램
  • [LeetCode_937] 로그파일 재정렬
  • [LeetCode_344] 문자열 뒤집기
HyeM207
HyeM207
"Reflections and Growth Through Records" 회고와 기록을 통한 성장으로
HyeM207
HYEM's Storage
HyeM207
  • ALL (115)
    • #️⃣ CS (Computer Science) (5)
      • Database (2)
      • SQL (2)
      • Git (1)
    • #️⃣ Data Engineering (43)
      • Airflow (18)
      • Spark (8)
      • Snowflake (2)
      • BI,DashBoard (4)
      • ELK Stack (2)
      • Hadoop (5)
      • Kafka (4)
    • #️⃣ Cloud&Container (16)
      • AWS (8)
      • GCP (1)
      • Docker (6)
      • Kubernetes (1)
    • #️⃣ Project 및 개발일지 (37)
      • Mini Project (5)
      • 개발일지 (9)
      • Algorithm 문제 풀이 (20)
    • #️⃣ 책 리뷰 (4)
    • #️⃣ 회고글&프로젝트 후기 (10)

공지사항

인기 글

최근 댓글

블로그 메뉴

  • 홈
  • 태그
  • 방명록
hELLO · Designed By 정상우.v4.2.2
HyeM207
[LeetCode_125] 유효한 팰린드롬
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.