[파이썬 알고리즘 인터뷰] 1. 유효한 팰린드롬 (leetcode 125)

2024. 1. 10. 01:21·공부기록/파이썬

 

이 글은 파이썬 알고리즘 인터뷰를 공부하며 작성한 글입니다


leetcode 125. Valid Palindrome

 

Valid Palindrome - LeetCode

Can you solve this real interview question? Valid Palindrome - A phrase is a palindrome if, after converting all uppercase letters into lowercase letters and removing all non-alphanumeric characters, it reads the same forward and backward. Alphanumeric cha

leetcode.com

문제

 

주어진 문자열이 팰린드롬인지 확인하라. 대소문자를 구분하지 않으며, 영문자와 숫자만을 대상으로 한다.

 

팰린드롬 : 앞뒤가 똑같은 단어나 문장으로, 뒤집어도 같은 말이 되는 단어 또는 문장

 

 

Example 1:

Input: s = "A man, a plan, a canal: Panama"
Output: true
Explanation: "amanaplanacanalpanama" is a palindrome.

 

Example 2:

Input: s = "race a car"
Output: false
Explanation: "raceacar" is not a palindrome.

 

Example 3:

Input: s = " "
Output: true
Explanation: s is an empty string "" after removing non-alphanumeric characters.
Since an empty string reads the same forward and backward, it is a palindrome.

 

내 풀이

class Solution:
    def isPalindrome(self, s: str) -> bool:
        a = ""
        for i in s:
            if i.isalnum():
                a += i.upper()
        return a == a[::-1]

 

딱 이 문제를 처음 봤을 때 저번에 파이썬 공부하면서 썼던

 

이 부분이 생각이 났다. 문자나 숫자나 영어나 각각에 따라 적용할 수 있는 함수들이 따로 있었는데.. 라는 생각이 들었고, 이 문제를 만족하려면 isalnum을 쓰면 좋겠다는 생각을 했다. (참고)

 

[파이썬][문제] map(int, input().strip().split(' '))

프로그래머스 문제를 푸는데 코드업에서는 a랑 b를 공백으로 띄어서 입력받을 때 a,b = input().split() 이런식으로 했었는데 여기서는 map 함수를 쓰길래 map 함수는 어떤 걸 하는지 궁금했다. a, b = map(

tyvkwygk.tistory.com

 

그래서 처음에 리스트를 쓸까도 생각을 했지만 문자열을 이용하기로 했고, 문자열을 넣고 그거 뒤집어서 한거랑 똑같으면 true, 아니면 false를 출력하도록 코드를 구현하였다.

 

+ [::-1]을 이용하였고, 리스트, 튜플, 문자열에서는 이렇게 할 수 있다.

 

 

 

 

 


 

책 풀이1 - 리스트로 변환

 

직접 문자열을 입력받아 팰린드롬 여부 판별

isalnum() : 영문자, 숫자 여부를 판별하는 함수로, 이를 이용해 해당하는 문자만 추가

pop()을 통해 맨 앞과 맨 뒤 값이 같은지 확인하는 식으로 접근

def isPalindrome(self, s: str) -> bool: 
	str = [] 
    for char in s: 
    	if char.isalnum(): 
        	str.append(char.lower()) 
        
    # 팰린드롬 여부 판별
    while len(str) > 1: 
        if str.pop(0) != str.pop(): 
            return False 
    return True

 

책 풀이2 - 데크 자료형을 이용한 최적화

 

Deque(데크) 

strs : Deque = collections.deque()

양쪽 끝 모두 접근가능하여 양 끝 연산에 대한 복잡도가 list에 비해 대폭 상승함. 

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

 

책 풀이3 - 슬라이싱 사용

 

정규식과 [::-1] 이용

def isPalindrome(self, s: str) -> bool: 
    s=s.lower() 
    s=re.sub('[^a-z0-9]','',s) 
    
    return s==s[::-1] #슬라이싱

 

 

 

<참고>

책 : 파이썬 알고리즘 인터뷰

책 풀이 코드 출처

 

GitHub - onlybooks/python-algorithm-interview: <파이썬 알고리즘 인터뷰> 95가지 알고리즘 문제 풀이로 완성

<파이썬 알고리즘 인터뷰> 95가지 알고리즘 문제 풀이로 완성하는 코딩 테스트. Contribute to onlybooks/python-algorithm-interview development by creating an account on GitHub.

github.com

 

기타 개념 참고

 

파이썬 자료구조 - 큐 Queue 와 데큐 Deque

♣ 파이썬 자료구조 - 큐 Queue 와 데큐 Deque 1. Queue는 데이터를 넣은 순서 그대로 출력합니다. 첫 ...

blog.naver.com

 

[Python] 파이썬 자료형 별 주요 연산자의 시간 복잡도 (Big-O)

실제 프로그램 개발에서 구현한 기능의 연산 속도 감소와 알고리즘 문제 풀이 등 여러 연산자를 사용해 연...

blog.naver.com

 

 

덱 - Deque (Double ended Queue)

일반적으로 우리가 알고 있는 Queue란, 한 쪽에서만 삽입/삭제를 했는데 Deque는 양 방향에서 삽입/삭제...

blog.naver.com

 

반응형

'공부기록 > 파이썬' 카테고리의 다른 글

[파이썬 알고리즘 인터뷰] 2. 문자열 뒤집기 (leetcode 344)  (4) 2024.01.10
[파이썬][문제] map(int, input().strip().split(' '))  (2) 2024.01.03
[파이썬][CodeUp]기초100문제  (2) 2024.01.02
'공부기록/파이썬' 카테고리의 다른 글
  • [파이썬 알고리즘 인터뷰] 2. 문자열 뒤집기 (leetcode 344)
  • [파이썬][문제] map(int, input().strip().split(' '))
  • [파이썬][CodeUp]기초100문제
  • [파이썬] 자료구조 (2) 파이썬 기본문법
쇼파죠하
쇼파죠하
소프트웨어학과 코린이 성장기
  • 쇼파죠하
    코린이의 성장기
    쇼파죠하
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • TIL
        • 한달 기록
      • 신한투자증권 N
        • 프로 디지털 아카데미 N
      • 공부기록 N
        • AWS
        • 트러블슈팅 N
        • 머신러닝
        • 알고리즘
        • 자료구조알고리즘
        • CS
        • 파이썬
      • 코린이의 성장기
        • 코린이의 백준 도전기
        • 코린이의 성장기
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 프디아
    • AWS
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    클라우드
    전공지식노트
    kdt교육
    LG Aimers
    CS
    알파코캠퍼스
    프로디지털아카데미
    파이썬알고리즘인터뷰
    신한투자증권
    JavaScript
    영리한 프로그래밍을 위한 알고리즘
    프로디지털아카데미6기
    백준
    프로 디지털 아카데미
    네트워크
    aws 구조와 서비스
    알파코
    Computer Networking: a top down approach
    9월기록
    코린이
    AI 전문과과정
    파이썬
    AWS
    react
    알고리즘
    프디아
    c언어
    K디지털트레이닝
    파이썬문법
    부트캠프
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
쇼파죠하
[파이썬 알고리즘 인터뷰] 1. 유효한 팰린드롬 (leetcode 125)
상단으로

티스토리툴바