Two Pointer(9)
-
[Hash, Two Pointer] Longest Substring Without Repeating Characters
반복되는 character가 없는 최대 길이를 가진 부분 단어를 구하라 start, maxLen이라는 지표를 두고, map이라는 dictionary를 통해 비교한다. 하나씩 글자를 순회하면서 같은 문자가 이미 map에 있다면 start를 해당 map의 위치로 바꿔주고, 그것이 아니라면 그냥 set만 해준다. 이후 start가 고려된 현재 길이가 이전 maxLen보다 크다면 교체해준다.
2021.04.05 -
[DP] Longest Palindromic Substring
s의 부분집합 중 가장 긴 palindromic한 요소를 찾아라! DP문제고 투포인터의 원리(실제로 투포인터는 아님)를 이용하여 문제를 풀었다. i를 Loop를 돌리면서 j라는 포인터를 두고, 두개의 스트링이 같은 지점까지 모두 검사한다. 만약 두개의 스트링이 같다면, left는 한칸 줄이고, right는 한칸 늘리면서 최대 palindromic까지 검사한다. 이렇게 검사한 결과가 max의 길이보다 크다면, max를 해당 값으로 바꿔준다(substring이용)
2021.03.31 -
[Array] 3Sum
배열의 subset인 triplet을 구해서, 해당 원소의 총합이 0이 되는 배열을 묶어 리턴하라는 문제다. 오름차순으로 배열을 정렬한다. 이후 포인터를 3개 두고 Loop를 돌린다. i는 고정시키고 나머지 두개의 포인터를 조절하는 방식으로 로직을 짯다. 이때 i와 i-1이 같다면, i-1을 검사할때 i도 검사된거나 다름 없으므로 continue를 사용하여 검사하지 않도록 한다. 여느 투포인터 검사처럼 r이 l보다 큰 시점까지만 검사해주고, 조건에 부합하는 solution은 리턴배열에 push한다. 이때 l은 늘리기만, r은 줄이기만 하는 검사를 진행하는데, 인접 원소와 값이 같다면 검사를 건너뛸 수 있도록 while문으로 처리해준다. 또한 sum이 음수라면 l을 옮기고, 양수라면 r을 줄이는 식으로 조..
2021.03.31 -
[Array] Sort Colors
input 배열인 nums에 대해 같은 숫자들(0,1,2)을 오름차순으로 모두 인접하게 만들라는 문제이다. 단, sort 메소드 쓰지말고 O(1)을 지키라고 한다. 단순한 방법으로 접근해보았다. 일단 0,1,2가 몇개 있는지 세었다. 이후 개수만큼 배열을 만들어 리턴해주었다.
2021.03.31 -
[Array] Container With Most Water
두 x좌표 사이의 길이와 두 x좌표에 대한 height값 중 최소값을 곱한 값이 최대가 되는 값을 찾아라 전형적인 two-pointer문제다 포인터를 두 개 두고 Loop를 돌며, 각 Loop의 면적값을 구해 global answer와 비교하는 방식이다. 이 문제가 two-pointer인 이유는 간단하게 x좌표가 같거나 작을 수 없으므로 검사가 필요 없기 때문이다. 예컨데 i가3이라면 i보다 작거나 같은 j는 검사할 필요가 없다 다음과 같이 이중for문을 쓰면 timeout 에러가 날 것이다 이렇게 forward와 backward를 정해주고, global answer를 바꿔가며 설정해주면 된다.
2021.03.29 -
[Array] Find the Duplicate Number
두번 나온 element 리턴하기 set을 이용하여 처음 나온 element는 add로 set에 넣고, 두번째 나온건 해당 element를 리턴하면 됨 왜 medium일까 궁금한 문제.. 나중에 바이너리 서치나 투포인터로도 풀어보자
2021.03.29