RIEN😚
이상한 나라의 개발자
RIEN😚
전체 방문자
오늘
어제
  • 분류 전체보기 (125)
    • Algorithm (68)
      • 알고리즘 (0)
      • Baekjoon (8)
      • 프로그래머스 (55)
      • HackerRank (5)
    • Android (30)
      • Project (1)
      • Error (2)
      • Studio (1)
      • Android (26)
    • Kotlin (6)
    • CS (4)
      • 네트워크 (2)
      • 데이터베이스 (2)
    • Front End (5)
      • React (1)
      • VUE (3)
      • Project (0)
      • 기타 (1)
    • 기록 (11)
      • 회고록 (6)
      • TIL (5)

블로그 메뉴

  • Github🔥
  • 포트폴리오🌹

공지사항

인기 글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
RIEN😚

이상한 나라의 개발자

Algorithm/HackerRank

[HackerRank] Palindrome Index - Python

2023. 2. 17. 19:27
728x90
반응형
 

Day 1 Interview Questions | HackerRank

Day 1 Interview Questions | HackerRank We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.

www.hackerrank.com

플랫폼은 문제가 영어로 출시되는 HackerRank!

 

HackerRank는 신기하게 연습문제들에도 시간제한이 있다는 점이 좋은거 같아요. 👍🏻

하지만 개인적으로 프로그래머스에 비해 UI가 좋지 않아, 문제를 푸는데 어려움이 있었습니다. 😭

 

1. 문제

특정 index의 문자를 제거했을 때 Palindrome 문자열이 된다면, 해당 index를 반환합니다.

 

[입력]

문자열 s

 

[출력]

Palindrome을 만들 수 있는 index (* 업다면 -1 반환)

 

2. 풀이

문제를 풀어보니, 하나의 조건을 더 추가해줄 필요가 있는듯 합니다.

🌹 문자의 제거는 문자열의 앞 또는 뒤에서 하나씩 제거할 수 있다는 점입니다. 👍🏻

 

이러한 조건을 추가한다면 왼쪽과 오른쪽에서 시작하여, Palindrome 문자열을 만들때까지

왼쪽 point는 1씩 증가, 오른쪽 point는 1씩 감소하는 연산을 수행하면 됩니다. 

size = len(s)
left, right = 0, size-1

while left < right:
	left+=1
    right-=1

 

Palindrome은 좌우가 동일해야 하므로 s[left] == s[right]여야 한다는 점에 주목해야 합니다.

만약, 이 둘이 다를 경우 가장 앞에 문자(left) 또는 가장 뒤 문자(right)를 제거했을 때 해당 문자열이 Palindrome인지 검사해줄 필요가 있습니다.

 

앞에 문자(left)를 제거하였을 때 해당 문자열이 Palindrome이라면 left의 값을 반환하고,

뒤 문자(right)를 제거하였을 때 하당 문자열이 Palindrome이라면 right의 값을 반환해주어야 합니다.

if s[left] != s[right]:
	if isPalindrome(s, left+1, right): return left
    if isPalindrome(s, left, right-1): return right

 

3. 코드

def isPalindrome(s, left, right):
    if left == right: return False
    while left < right:
        if s[left] != s[right]: return False
        left+=1
        right-=1
    return True

def palindromeIndex(s):
    size = len(s)
    if size < 2: return -1
    
    left, right = 0, size-1
    if isPalindrome(s, left, right): return -1
    while left < right:
        if s[left] != s[right]:
            if isPalindrome(s, left+1, right): return left
            if isPalindrome(s, left, right-1): return right
        left+=1
        right-=1
    
    return -1

 

 

반응형

'Algorithm > HackerRank' 카테고리의 다른 글

[Hackerrank] 1Week + Day7  (0) 2023.02.21
[Hackerrank] 1Week + Day6 - BFS  (0) 2023.02.20
[HackerRank] 1Week + Day5 - Pairs  (0) 2023.02.19
[HackerRank] 1Week + Day4 - Truck Tour  (0) 2023.02.18
    'Algorithm/HackerRank' 카테고리의 다른 글
    • [Hackerrank] 1Week + Day7
    • [Hackerrank] 1Week + Day6 - BFS
    • [HackerRank] 1Week + Day5 - Pairs
    • [HackerRank] 1Week + Day4 - Truck Tour
    RIEN😚
    RIEN😚
    안드로이드 / 코틀린 독학으로 취업하자!

    티스토리툴바