two pointer(4)
-
Leetcode 5. Longest Palindromic Substring - Python (cf. 백준 13275)
Leetcode 5 문제 보기 문제 이해하기 주어진 문자 s의 substring 중에서 가장 긴 팰린드롬인 substring을 찾아라. 즉, 뒤집어도 같아지는 (eg. 토마토) 부분문자열을 출력하라. (1 max_length: res = s[left:right + 1] max_length = temp_length left -= 1 right += 1 짝수 개일 경우 두 개의 연속된 문자들을 기준으로 퍼져나가자. left, right = i, i + 1 while left >= 0 and right max_length: res = s[left:right + 1]..
2022.12.15 -
Leetcode 647. Palindromic Substrings - Python
Leetcode 647 문제 보기 문제 이해하기 영문 알파벳 소문자로 이루어진 문자열 s가 주어진다. 이때 s의 substring 중 팰린드롬인 경우가 얼마나 되는지 구하여라. 아이디어 구상 substring, 즉 부분문자열은 문자열내에서 일부 문자열을 그대로 떼어낸 형태를 말한다. 팰린드롬이란 앞뒤가 똑같은, 뒤집혀도 뒤집히기 전과 형태가 같은 것을 의미한다. 각각의 substring이 팰린드롬인지 확인하기 위해서는 어떤 한 character를 중심으로 양 옆으로 포인터가 퍼지며 두 포인터가 가리키는 character가 같은지 확인하면 된다. 그렇다면 for문을 통해 문자열 s의 첫번째 글자부터 반복을 돌리고, 각 글자에 대해 중심부터 투 포인터가 퍼지며 팰린드롬 여부를 판별하면 되겠다. 여기서 하나 ..
2022.07.21 -
Leetcode 42. Trapping Rain Water - Python
Leetcode 42 문제 보기 문제 이해하기 높이에 관한 정보가 주어질 때, 가둘 수 있는 빗물의 부피를 구하라. 예를 들어, height = [0,1,0,2,1,0,1,3,2,1,2,1] 일 때(위 그림 참조), 정답은 6이다. 아이디어 구상 가장 먼저 떠오른 생각은, 가장 높은 지점을 기준으로 좌우를 나누어 계산하면 될 것 같다라는 점이다. 다음처럼 생각해보자. 가장 높은 곳을 기준으로 좌측 영역을 우선 생각해보자. 첫 시작부터 포인터가 이동하면서 max값을 업데이트하며, max와 현재 지점의 높이의 차를 정답에 더해준다. 포인터는 전체에서 가장 높은 곳에 도달하면 멈추게 된다. 이렇게 되면 좌측 영역에서, 우측에는 분명한 '벽'(전체에서 가장 높은 지점)이 존재하므로 영역 내 높이 낮아지는 지점에..
2022.06.27 -
Leetcode 15. 3Sum - Python
Leetcode 15 문제 보기 문제 이해하기 정수가 담긴 리스트 nums가 있다. (-10^5 0: right -= 1 elif three_sum List[List[int]]: res = [] if len(nums) 0 and n..
2022.04.06