뒤에서부터 채우기.앞에서부터 채운다면 temp variable에 따로 저장해야한다. 뒤에서부터 채운다면 temp variable을 사용할 필요가 없다. 앞에서부터 채운다면 또 계속 숫자들을 움직여야한다. 하지만 뒤에서부터 채운다면 움직일 필요가 없다. 이 개념은 gre
Sliding window 같은 느낌의 two pointers 문제이다. 핵심은 underscore(\_) 되어 있는 인덱스들은 아무 숫자여도 상관없음. 그러므로 하나의 포인터는 현재 overwrite 해야하는 인덱스, 다른 하나는 remove 할 val을 건너뛴 다음
나는 전 문제인 Remove element에서 영감을 받은 답안을 적었다. 마찬가지로 fast pointer 하나와 slow pointer 하나로 duplicate 건너뛰기를 하며 duplicate이 아닌 element 들을 사용해 overwrite 하는 답안이다. 내
Intuition 🤔 sliding window of size 3를 사용해야했다. nums\[fast pointer\] != nums\[slow pointer - 2\]는 有效段 안에 maximum 2개의 duplicate element만 들어올 수 있게 도와준
Additional constraint: Solve in linear time with O(1) space. 왜 more than n/2 times 일까? \[3, 3, 1, 2, 4]에서 3은 majority가 아니다. 왜 이런 setup을 골랐을까? 왜 항상 존재해
이미 풀었었던 문제이다.
최소 가격을 킵한다. 느낌대로 풀면 된다. 최솟값을 킵하고 그 숫자보다 크면 그 차이를 계속 비교해 maximum profit을 구한다. 만약 최솟값 보다 더 작은 value가 있다면 새로운 최솟값으로 정하고 그때부터 또 maximum profit을 구한다. 왜 못 풀
왜 같은 날에 사서 같은 날에 팔 수 있게 만들었을까? 사실 내가 생각했을때 이 문제는 좀 더 잘 쓰여질 수 있는거 같다. 왜 수익을 내고 다시 stock을 살때 그 수익에서 stock의 가격을 빼지 않는거지? 이해가 안되지만 그래도 문제니까...
처음에는 dynamic programming 을 써야할까 생각했다. 하지만 그렇지 않아도 될 것 같다. 현재 step count를 저장해놓고 한칸씩 움직일때마다 하나씩 줄이고, 현재 count보다 현재 위치한 인덱스의 숫자가 더 크다면 그 숫자로 replace하면 될
이번이야말로 dynamic programming을 사용하면 될 것 같다. nums와 같은 사이즈의 배열 (distanceArray)을 initialize한다. 각 칸에는 최종 위치까지 도달하는데 필요한 최소거리를 저장한다. 그리고 각 칸을 iterate할때마다 현재 위
Sort descendingly. 그러면 현재 배열 인덱스보다 작은 h-index 들은 무조건 h-index가 맞다. 그렇다면 가장 어려운 것은 언제 return을 하는지다.
Intuition 🤔 첫번째로 드는 생각은 일단 한 언어의 많은 API들을 공부해야겠다이다. Random java.util.Random Random random = new Random() random.nextInt(max - min) + min; HashSet j
나열된 수의 누적된 합을 말한다.배열의 일부 구간에서 대한 합을 매우 빠르게 구할 수 있게 해준다. N개의 원소로 이루어진 배열이 주어졌을 때 반복문을 통해 부분 배열의 합을 구하려면 O(N)이 걸리는데, 누적합을 이용하면 부분합을 0(N+M)으로 구할 수 있다. E
먼저 카테고리를 보니 Greedy 라고 한다 (...)아무래도 이런 느낌의 반복되는 수학적 계산 중 최적화된 방법을 찾아내는 문제들은 Greedy를 사용해야하는 듯 하다. 그렇다면 어떤 것이 Greedy인걸까? 첫번째로는 gas - cost 에서 그 합이 0 보다 커야
문제가장 큰 문제는 배열 안에 최소값에 대해서 어떻게 해야할까이다. 최소값과 상관 없이 무조건 1로 시작한다고 하자. 3,2,1,0 은 그러면1, 0, -1, -2를 갖게 된다. 모두 양수의 캔디를 갖게 만들면1 - 3 + 12 = 10이 된다. 다른예로3, 2, 3,
문제Categories에 Dynammic programming, Array, Two-pointers, Stack, Montonic Stac이라고 한다 (...)여러가지 문제들이 있다:1\. start와 end가 같을 수 있다. end가 Local maximum이니 바로
문제Recursion을 써서 각 If 조건에 맞는 값들을 계산하면 되겠다 생각했다. 또 I, X, 그리고 C에 관해서는 뒤에 나오는 글자가 각자 상황에 맞는 글자들이라면 -를 붙여 빼게 하면 되겠다고 생각했다.HashMap을 맏드는데 에러가 떴다. In Java, st
뒤에서부터 세기.
가장 처음 두개를 비교해서 longest prefix를 찾는다. 만약 longest perfix가 ""라면 ""를 return한다. 그렇게 계속 strs를 돌면서 prefix가 안된다면 또 현재 prefix의 substring이 prefix가 되게 만들어 prefix를
문제 답안 1 답안 2 이것은 [Rabin-Karp 알고리즘](https://velog.io/@emplam27/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B7%B8%EB%A6%BC%EC%9C%BC%EB%A1%9C-%EC%95%8C%E