์•Œ๊ณ ๋ฆฌ์ฆ˜๐Ÿฅš/๋ฌธ์ œํ’€์ด (Python)

[LeetCode] 125. valid-palindrome (Easy) 2023/4/27

๐Ÿช„ํ•˜๋ฃจ๐Ÿช„ 2023. 4. 27. 18:59
728x90
๋ฌธ์ œ ์ œ๋ชฉ ์ •๋‹ต๋ฅ  ๋‚œ์ด๋„
125. valid-palindrome 44.5% Easy

 

๋ฌธ์ œ ์š”์•ฝ

์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด์ด ํŒฐ๋ฆฐ๋“œ๋กฌ์ด๋ฉด ์ฐธ์„, ์•„๋‹ˆ๋ผ๋ฉด ๊ฑฐ์ง“์„ ๋ฐ˜ํ™˜ํ•˜๋ผ

์กฐ๊ฑด 1) ๋ชจ๋“  ๋Œ€๋ฌธ์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๋ผ

์กฐ๊ฑด 2) ์ˆซ์ž์™€ ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ๋ถ€๋ถ„์€ ๋ชจ๋‘ ์ง€์›Œ๋ผ

์กฐ๊ฑด 3) ํŽ ๋ฆฐ๋“œ๋กฌ์ด๋ž€ ์•ž์—์„œ๋ถ€ํ„ฐ ์ฝ์–ด์˜จ ๊ฒƒ๊ณผ ๋’ค์—์„œ๋ถ€ํ„ฐ ์ฝ์–ด์˜จ ๊ฒƒ์ด ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค(์ขŒ์šฐ๋Œ€์นญ)

 

๊ณตํ†ตํ’€์ด

Step1. ๋Œ€๋ฌธ์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๊ธฐ + ์ˆซ์ž์™€ ๋ฌธ์ž๋ฅผ ์ œ์™ธํ•œ ๋ฌธ์ž์—ด ์‚ญ์ œ

Step2. ํŽ ๋ฆฐ๋“œ๋กฌ ํŒ๋‹จ

 

Step1-1. ๋Œ€๋ฌธ์ž๋ฅผ ์†Œ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๊ธฐ -> string.lower() ํ•จ์ˆ˜ ์ด์šฉ

 

๋ฌธ์ž์—ด ๋Œ€๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜ string.upper()
๋ฌธ์ž์—ด ์†Œ๋ฌธ์ž๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ํ•จ์ˆ˜ string.lower()
๋ฌธ์ž์—ด์˜ ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ๋Œ€๋ฌธ์ž์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜ string.isupper()
๋ฌธ์ž์—ด์˜ ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์†Œ๋ฌธ์ž์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜ string.islower()

 

Step1-2. ์ˆซ์ž์™€ ๋ฌธ์ž๋ฅผ ์ œ์™ธํ•œ ๋ฌธ์ž์—ด ์‚ญ์ œ -> if ์ด์šฉํ•ด์„œ ํŒ๋‹จ | ์ •๊ทœ์‹ ์ด์šฉ

 

๋ฌธ์ž์—ด์˜ ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์˜์–ด๋‚˜ ํ•œ๊ธ€์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜ string.isalpha()
๋ฌธ์ž์—ด์˜ ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์˜์–ด๋‚˜ ํ•œ๊ธ€์ด๋‚˜ ์ˆซ์ž์ธ์ง€ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜ string.isalnum()

 

๊ธฐ๋ณธ ์ •๊ทœํ‘œํ˜„์‹ ๊ธฐํ˜ธ

์ˆซ์ž์™€ ๋งค์น˜ [0-9] \d
์ˆซ์ž๊ฐ€ ์•„๋‹Œ๊ฒƒ๊ณผ ๋งค์น˜ [^0-9] \D
์•ŒํŒŒ๋ฒณ ๋ฌธ์ž์™€ ๋งค์น˜ [a-zA-Z]  
์•ŒํŒŒ๋ฒณ ๋ฌธ์ž+์ˆซ์ž์™€ ๋งค์น˜ [a-zA-z0-9_] \w
์•ŒํŒŒ๋ฒณ ๋ฌธ์ž์™€ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ๊ฒƒ๊ณผ ๋งค์น˜ [^a-zA-z0-9_] \W
์ค„๋ฐ”๊ฟˆ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฌธ์ž์™€ ๋งค์น˜ .  
๋ฐ”๋กœ ์•ž์˜ ๋ฌธ์ž ๋ฐ˜๋ณต(0~๋ฌดํ•œ) *  
๋ฐ”๋กœ ์•ž์˜ ๋ฌธ์ž ๋ฐ˜๋ณต(1~๋ฌดํ•œ) +  
๋ฐ”๋กœ ์•ž์˜ ๋ฌธ์ž ํŠน์ • ํšŸ์ˆ˜๋งŒํผ ๋ฐ˜๋ณต {n}  
๋ฐ”๋กœ ์•ž์˜ ๋ฌธ์ž ํŠน์ • ํšŸ์ˆ˜ ๋ฒ”์œ„ ๋งŒํผ ๋ฐ˜๋ณต {n, m}  

 

 

Step2. ํŽ ๋ฆฐ๋“œ๋กฌ ํŒ๋‹จ

 

- ๋ฐฐ์—ด์˜  pop ๊ธฐ๋Šฅ์„ ์ด์šฉํ•ด ๋ฌธ์ž๋กœ ๋น„๊ต (pop(0)๊ณผ pop() ๋น„๊ต) $O(n^{2})$

- ๋ฐํฌ ์ž๋ฃŒํ˜•์„ ์ด์šฉํ•ด ์ตœ์ ํ™” (popleft()์™€ pop() ๋น„๊ต) $O(n)$

์ด์œ  :  pop(0)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” $O(n)$ ์ด์ง€๋งŒ popleft()๋Š” ์–‘๋ฐฉํ–ฅ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ $O(1)$ ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

- ๋ฌธ์ž์—ด ์Šฌ๋ผ์ด์‹ฑ ์ด์šฉํ•ด์„œ ๋ฌธ์ž์—ด ํ†ต์งธ๋กœ ๋น„๊ต

 

 

๊ตฌํ˜„

def isPalindrome(self, s:str) -> bool:
    ## ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜
    s.lower()
    ## ์ˆซ์ž, ์•ŒํŒŒ๋ฒณ๋งŒ ๋‚จ๊ธฐ๊ธฐ
    s=re.sub(['^a-z0-9']. '', s)
    
    #์Šฌ๋ผ์ด์‹ฑ ์ด์šฉํ•ด์„œ ๋ฌธ์ž์—ด์„ ๋’ค์ง‘์€ ํ›„ ๊ฐ’์ด ๊ฐ™์€์ง€ ํ™•์ธ
    return s==s[::-1]

 

728x90