두 수를 더해 특정한 수가 되도록 하라
양 옆에서 다가오는 포인터들
물의 양은 항상 벽의 최소값과 상관있다.
파싱?
Dynamic programming이 생각나는 문제
아들딸이 다컸다 이 딸들아
연결리스트를 거꾸로 돌리기
토끼와 거북이
quick sort가 아닌 quick select
이게 어떻게 O(logN) 시간복잡도가 될수 있지??
Binary search의 응용
간단한 이진트리 알고리즘
BFS와 DFS를 활용한 다방면 문제해결법
level order traversal에 대해 알아보자
You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order, and each of their nodes conta
Tree 노드 갯수 세기
Binary search tree 기초
2D array의 순회
BFS의 활용
발상의 전환
그래프에 대한 BFS
Topology sort, 위상 정렬에 대해 알아보자
최단 경로 계산 방법론들
다이나믹 프로그래밍의 기초.
3차원 메모이제이션
백트래킹의 활용
회문의 특성을 이해하자
문자열의 인덱스 다루기.
숫자와 문자열
atoi의 구현
간단한 문자열의 파싱
경우의 수
문자열의 동일한 prefix
BFS 변형 기출
dfs의 활용
스도쿠 중복 확인 알고리즘
휴일이지만 한문제는 써야지
메모이제이션 활용의 기초
백트래킹
조합의 사용
s가 t로 나누어진다는것은 s 문자열이 여러개의 t의 나열로 이루어져 있다는 뜻이다.주어진 두 문자열에 대해 최대공약-문자열 을 구하시오.1 <= str1.length, str2.length <= 1000두 문자열은 영어 대문자만을 포함한다.문자열을 나누었을
파이썬에서 정렬 비교함수 사용하기
배열섞기
힙정렬의 사용
연결 리스트
정수로만 이루어진 오름차순으로 정렬된 배열이 주어진다.모든 원소는 하나를 제외하면 모두 2번 반복한다.반복하지 않는 원소 하나를 찾아 리턴하시오.시간복잡도 O(log n), 공간복잡도 O(1) 안에 해결하시오.1 <= nums.length <= 10^50 &
Dynamic Programming
트리에 자식이 네개?!
이진탐색의 색다른 활용법
Trie의 색다른 활용법~
오래간만의 Daily EASY!
그래프의 연결성
돌고돌아 결국 DP
연결 리스트의 head와 정수 x가 주어진다.x보다 작은 값은 연결리스트의 왼쪽에, x보다 크거나 같은 값은 오른쪽에 가도록 해라단, 값의 위치가 바뀔때 상대적인 위치는 유지되어야 한다.연결 리스트의 길이는 0 ~ 200 이다.$$-100 <= x <= 20
정수 자료형 리스트와 슬라이딩 윈도우의 크기가 주어진다.만들어질수 있는 모든 슬라이딩 윈도우 내부의 최댓값을 가지는 배열을 리턴하시오.배열에서 검은색으로 칠해진 부분이 슬라이딩 윈도우이다.5개짜리 배열에 3개 크기의 슬라이딩 윈도우는 위의 3가지가 있을수 있다.윈도우가
세개의 문자열 s1, s2, s3이 주어집니다.s3이 s1과 s2 두개를 끼워맞춰서 생성되는지 여부를 리턴하세요두 문자열을 끼워 맞춘다는것은 s1과 s2를 부분문자열로 분리했을때, 이들을 순서대로 사용해 s3을 조립할수 있어야 합니다.$$0 <= s1.length
index번째 날짜의 주식 가격이 들어간 prices 배열이 주어진다.하나의 주식을 샀다 다시 판다고 가정할때, 최대의 수익을 구하시오.$$0 <= prices.length <= 10^5$$$$0 <= pricesi <= 10^4$$가장 오른쪽의
당신이 그 위치에서 점프할수 있는 최대의 길이의 정보를 가지는 배열이 주어집니다.첫번째 위치에서 마지막 위치까지 점프로 이동할수 있는지의 여부를 리턴하세요.$$0 <= nums.length <= 10^4$$$$0 <= numsi <= 10^5$$문
주어진 정수 배열에 대해서 세 원소를 뽑아 triplet을 만들때, 각 원소의 합이 0이 되는 쌍들을 구해 배열로 만들어 리턴하시오중복된 triplet은 있어선 안됩니다.$$3 <= nums.length <= 3000$$$$-10^5 <= numsi &
정수 배열 nums와 정수 x가 주어집니다.한 Operation 을 통해 nums의 왼쪽 끝이나 오른쪽 끝의 값을 제거하고 그만큼의 값을 x로부터 제거할수 있습니다.최소한의 Operation 을 통해 x를 0으로 만들수 있는 Operation 의 횟수를 구하시오단, 불
문자열 s와 t가 주어집니다.문자열 t에 있는 모든 문자를 포함하는 가장 작은 s의 부분문자열을 구해 리턴하세요답은 반드시 한개 이하가 존재하며, 답이 없을시 빈 문자열을 리턴하세요대소문자를 구분합니다.$$m == s.length$$$$n == t.length$$$$1
문제 위와 같이 생긴 샴페인 잔의 탑이 100층이 있습니다. 각각의 샴페인은 1의 양을 담을수 있고, 그 이상은 양 옆으로 흘러 내립니다. 흘러내리는 양은 정확히 절반씩입니다. 맨 위에 poured 만큼을 흘려 보냈을떄 queryrow 번째 줄, queryglass
정렬되지 않은 정수 배열이 주어졌을때,이들로 이룰수 있는 가장 긴 연속하는 수열의 길이를 구하세요O(n) 시간 복잡도 안에 해결해야 합니다.$$0 <= nums.length <= 10^5$$$$-10^9 <= numsi <= 10^9$$먼저 모든
주어진 문자열 s중에서 모든 중복되는 문자를 제거하세요.단, 결과는 사전순으로 가장 앞에 오는 값이여야 합니다.이번 풀이는 먼저 코드를 쓰고 해설하는 식으로 진행해 보겠다.자료구조last : 특정 문자열이 언제 가장 마지막에 나오는지를 가지고 있다.문자가 어찌되든 한번
문제 정수 배열이 주어집니다. index는 i < j < k 인데, 배열 nums에 대해 nums[i] < nums[k] < nums[j] 인 패턴이 존재하는지를 리턴하세요. 예를 들자면 [1, 3, 2] 가 있습니다. 예시
문제 링크풍선이 가로로 차지하는 첫 지점과 끝지점들의 배열이 주어지는데, 이들을 화살로 터뜨린다고 할때 최소한의 화살로 터뜨릴 경우화살을 몇개나 쓰는가?$$1 <= points.length <= 10^5$$$$pointsi.length == 2$$$$-2^{
특정 트리의 preorder 순회와 inorder 순회의 결과를 담은 두 배열이 주어진다. 이 둘에 다 해당되는 특정한 트리를 리턴하시오.$$1 <= preorder.length <= 3000$$$$inorder.length == preorder.length
정수 배열 nums가 주어집니다.배열의 index 인 i, j, k 에 대해i < j < k 인 경우 numsi < numsj < numsk 가 성립하는 경우가 존재하는지boolean 자료형으로 리턴하시오.$$1 <= nums.length &
정수배열 nums와 정수 k가 주어집니다.한번의 연산을 통해 nums에서 합쳤을때 k가 되는 두 원소를 제거할수 있습니다.nums에서 위 연산을 수행할수 있는 최대 횟수를 리턴하시오.$$1 <= nums.length <= 10^5$$$$1 <= nums
두 변수의 쌍의 배열인 equations 와 배열 한 쌍 (a, b) 에 대해 a / b 의 값을 가지는 equations 배열이 있다.두 배열을 이용해 queries 배열 내 변수 쌍의 나눗셈 결과를 배열로 리턴하시오.만약 나눗셈이 불가능하다면 -1을 리턴하시오.$$
0 ~n-1 으로 이름붙혀진 n개의 도시와 그 도시들을 잇는 도로 n-1 개의 배열이 주어진다.두 도시를 건너는 방법은 하나밖에 없다. ( 사이클이 없다 )connectionsi 배열의 a_i, b_i 는 a도시에서 b도시로 가는 도로가 존재한다는 의미이다.0번 도시로
k개의 숫자로 이루어져 총 합이 n이 되는 숫자의 조합들을 리턴하세요숫자는 1~9 까지 사용 가능하며, 같은 숫자가 두번이상 쓰여선 안됩니다.$$2 <= k <= 9$$$$1 <= n <= 60$$백트래킹을 사용한다.현재까지 구한 합, 추가 가능한
n 길이의 배열 두개가 주어질때 0~n-1 의 index중 k개의 조합을 선택했을때sum(nums1i_0, nums1i_1, ..., nums1i_k-1) \* min(nums2i_0, nums2i_1, ..., nums2i_k-1) 의 최대값을 구하시오$$1 <
i번째 날의 주식 가격을 담은 prices 배열이 있습니다. 또한 주식을 판매할때마다 fee 만큼의 비용을 지불해야 합니다. 1주를 매수, 매도 함으로 얻을수 있는 최대의 이익을 구하세요 단 아래 규칙을 따라야 합니다.동일한 날짜에 매수, 매도 주문을 체결할수 없습니
정수 n이 주어진다, n+1 크기의 배열을 만들어 배열 값으로 해당 index i를 2진수로 표현했을때 1의 갯수를 가지도록 하십시오.$$0 <= n <= 10^5$$n개의 숫자에 대해 각각 1의 갯수를 구한다.n개의 숫자에 대해 logN의 시간복잡도로 1의
정수 배열 prices가 주어졌을때,next함수를 호출하면 지금까지 자신에게 next로 주어졌던 값들보다 작거나 같았던 값의 갯수에 자기자신의 갯수를 더해 리턴한다.단 작거나 같았던 숫자들은 연속해서 위치해야 한다.Ex. (30, 50, 40) -> 40보다 작거나 같
Run-length encoding 은 문자열을 압축하는 방식중 하나로, 문자가 연속해서 2개 이상 등장할시 이를 (해당문자열)(문자열이 등장한 횟수)로 표현하는 것으로, 예를 들어 aaabbcccc 는 a3b2c3 으로 표현할수 있다.주어진 문자열 s를 Run-l
n개의 작업이 있다, 모든 작업은 startTimei 에 시작해 endTimei에 끝나며 profiti 만큼의 이득을 준다.만약 2개 이상의 작업이 겹치지 않도록 스케줄을 구성할때, 얻을수 있는 최대의 이득을 구하라.$$1 <= startTime.length ==
주어진 배열에 대해 등차수열을 이루는 모든 길이가 3개 이상인 부분수열의 갯수를 구하시오$$1 <= nums.length <= 1000$$$$-2^{31} <= numsi <= 2^{31} - 1$$2차원 dp를 쓰되 row는 2개 이상의 등차수
주어진 정수 배열에 대해 3개의 숫자를 뽑았을때, 세 숫자의 합과 주어진 타겟 값과의 차이가 가장 작은세 숫자의 합을 리턴하시오.$$3 <= nums.length <= 500$$$$-1000 <= numsi <= 1000$$$$-104 <=
사용가능한 숫자들의 배열이 주어지고, 이들을 더해 완성할 타겟 값이 주어진다.배열에 들어간 숫자들을 이용해 타겟 합을 가지는 부분배열을 만들때,모든 부분배열의 조합을 중복없이 전부 리턴하시오.$$1 <= candidates.length <= 100$$$$1
배열이 주어질때 주어진 규칙대로 숫자들을 가져와 합한 최대값을 구하라배열에서 값 하나를 가져와 결과에 더하면 가져온 값 i에 대해 모든 배열의 i-1과 i+1값을 없앤다.$$1 <= nums.length <= 2 \* 10^4$$$$1 <= numsi
먼저 주어진 배열을 최대 k개의 길이를 가지는 subarray 로 쪼갭니다.이후 arr의 값은 자신이 해당한 subarray의 최댓값으로 했을때, 새로 계산된 arr의 합의 최댓값을 리턴하세요$$1 <= arr.length <= 500$$$$0 <= a
양의 정수가 담긴 배열 nums가 주어진다, 이 nums로 아래의 조건을 만족하는 부분배열을 만들었을때최대 길이의 부분배열을 리턴하시오, 여러개가 있으면 그중 아무거나 리턴하면 된다.조건모든 배열의 원소들에 대해 쌍을 만들었을때, 그 쌍은 반드시 한 수가 한 수를 나눌
당신에게 횡방향의 건물들과 몇개의 벽돌과 몇개의 사다리가 주어진다.당신이 건물 사이를 이동할때 이전의 건물이 다음 건물보다 낮거나 같으면 그냥 이동 가능하지만만약 다음 건물이 더 높다면, 반드시 그 높이만큼의 벽돌이나 사다리 한개를 소모해야 한다.당신이 최고로 멀리 갈
N개의 방이 주어지고 방들은 각각 0~n-1 의 번호를 가진다.당신에겐 회의 시간이 담긴 2차원 배열이 주어지는데 배열의 각 원소는 회의의 시작시간, 끝나는 시간 을 가지며 회의는시작시간에 시작해 끝나는 시간을 미포함한 상태로 끝난다.Ex. 1, 3 -> 1시에 시작해
정수 배열 arr이 주어졌을때, arr에서 만들수 있는 모든 부분 배열에 대해 그에 해당하는 최솟값이 존재한다.그 최솟값들의 합을 구하시오.값이 너무 크면 10^9 + 7 로 나머지 연산하여 리턴하라1 <= arr.length <= 3 \* 10^41 <
주어진 길이 n의 정수 배열에 1~n의 숫자들이 있다.이 숫자들이 1번 혹은 2번씩 등장할때, 2번 등장하는 숫자들의 배열을 리턴하시오.단 O(n)의 시간복잡도와 O(1)의 공간복잡도를 가져야 한다.$$n == nums.length$$$$1 <= n <= 1
양수를 표기하는 문자열 num과 정수 k가 주어진다.num에서 k개의 자리를 빼서 가장 작은 정수가 되게 하려면 어떻게 해야하는가?결과로는 k개의 자리를 뺀 작은 정수를 리턴한다.$$1 <= k <= num.length <= 10^5$$num은 숫자 자