[ Leetcode ] 125번 Valid Palindrome 풀이

2021. 4. 15. 23:18·Archive/Develop
728x90
반응형

 

이 포스팅은 "파이썬 알고리즘 인터뷰" 를 읽고 작성된 포스팅임을 밝힙니다.

 

 

 

leetcode.com/problems/valid-palindrome/

 

Valid Palindrome - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

 

 

 

 

 

 

펠린드롬이란?

 

 

앞뒤가 같은 단어나 문장을 말하는 것으로,

 

"수박은 박수" 나 "다시 합창합시다" 와 같은 것을 말한다.

 

 

해당 문제는 대소문자를 구분하지 않은 영문자와 숫자를 대상으로

펠린드롬인지 아닌지에 대한 여부를 판단하는 문제이다.

 

 

 

 

 

List 로 풀기

 

 

 

class Solution:
    def isPalindrome(self, s: str) -> bool:
        strs=[]
        for char in s:
            if char.isalnum():
                strs.append(char.lower())
        while len(strs) > 1:
            if strs.pop(0) != strs.pop():
                return False
        return True

 

 

Runtime : 288ms

 

 

데크 자료형을 이용해 풀기

 

 

class Solution:
    def isPalindrome(self, s: str) -> bool:
        strs: Deque = collections.deque()
            
        for char in s:
            if char.isalnum():
                strs.appned(char.lower())
                
        while len(strs)> 1:
            if strs.popleft() != strs.pop():
                return False
        return True

 

 

Runtime : 56ms

 

 

 

리스트로 구현한 코드에서 pop(0) 에 해당하는 빅오는 O(n) 이지만,

데크 자료형에서의 popleft() 는 O(1) 이기 때문에, 이렇게 Runtime 차이가 난다.

 

 

 

 

 

슬라이싱을 이용해서 풀기

 

 

class Solution:
    def isPalindrome(self, s: str) -> bool:
        s = s.lower()
        s = re.sub('[^a-z0-9]','',s)
        
        return s==s[::-1]

 

 

진짜 문자열 슬라이싱은 사기다.

 

Runtime : 40ms

 

 

 

슬라이싱을 이용할 때,

우리가 위치를 지정해주면 해당 위치를 가진 배열의 포인터를 얻게 된다.

이를 통해 연결된 객체를 찾아 실제 값을 찾아내는 것이다.

 

이 과정은 속도가 굉장히 빨라서 문자열을 조작할 때면

슬라이싱을 사용하는 것을 권장한다.

 

 

 

 

 

 

 

오늘도 즐거운 파이썬 ~ 

 

 

 

728x90
반응형

'Archive > Develop' 카테고리의 다른 글

[ LeetCode ] 937번 Reorder Data in Log Files 풀이  (0) 2021.04.16
[ LeetCode ] 344번 Reverse String  (0) 2021.04.15
코테를 위한 준비 과정(순서)  (0) 2021.04.15
[ C++ ] 객체 포인터와 객체 - string 클래스 find() | C++ 행맨 게임  (0) 2021.04.13
[ Oracle ] 오라클 서브쿼리 예제  (0) 2021.04.12
'Archive/Develop' 카테고리의 다른 글
  • [ LeetCode ] 937번 Reorder Data in Log Files 풀이
  • [ LeetCode ] 344번 Reverse String
  • 코테를 위한 준비 과정(순서)
  • [ C++ ] 객체 포인터와 객체 - string 클래스 find() | C++ 행맨 게임
코뮤(commu)
코뮤(commu)
코딩으로 커뮤니케이션하는 코뮤입니다 😎
  • 코뮤(commu)
    코뮤(COMMU)
    코뮤(commu)
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Archive
        • Hacking
        • Develop
        • ETC
      • Algorithm
      • DB&Infra
      • ETC
      • Node
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • IT지식보따리
    • IT가 맛있다
    • IT 천재
  • 공지사항

    • 배고픕니다
  • 인기 글

  • 태그

    코드업 기초
    백준 파이썬
    파이썬
    파이썬 알고리즘
    Git
    docker
    Python
    파이썬 기초
    javascript
    Codeup
    oracle db
    오라클
    자바스크립트 API
    백준 풀이
    자바스크립트
    백준 문제풀이
    C++
    카카오 100일 프로젝트
    Oracle
    백준
    파이썬 기초 문제
    장고
    Django
    자바스크립트 객체
    비박스
    보안뉴스
    코드업
    파이썬 문제
    파이썬 백준
    코드업 파이썬 기초 100제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
코뮤(commu)
[ Leetcode ] 125번 Valid Palindrome 풀이
상단으로

티스토리툴바