문제 각각 m개와 n개가 오름차순으로 정렬된 nums1 배열과 nums2 배열이 있다. 이 두 배열을 오름차순으로 정렬된 하나의 배열로 만드는 것이 문제이다. 단, 정렬된 배열은 nums1에 저장되어야한다. (이를위해 nums1의 길이는 m + n으로 생성되어있다.)
nums 배열에서 모든 val 값을 지우고 남은 원소의 개수(k)를 리턴한다. 이 때, nums 배열의 0 ~ k-1번째 인덱스는 지워지지 않고 남은 원소로 채워져야한다. 예를들어, nums = \[0,1,2,2,3,0,4,2], val = 2일때 5를 리턴하고 num
오름차순으로 정렬된 nums 배열에서 중복된 값을 제거하고 난 뒤 nums 배열의 0 ~ k-1(k = 중복을 제거한 뒤 남은 원소들의 개수) 인덱스의 원소들이 중복을 제거한 유일한 원소들로 채워져야 한다.예를들어, nums = \[0,0,1,1,1,2,2,3,3,4]
전에 풀었던 26. Remove Duplicates from Sorted Array 문제와 거의 동일하다. 다른점은 중복을 제거하되 최대 중복을 2개까지 허용하는 것이다.예를들어 nums = \[1,1,1,2,2,3]이라면 중복을 최대 2개까지 허용하면서 제거하면 nu
문제 길이가 n인 nums 배열에서 n / 2번 이상 나온 element를 Majority Element라고 한다. nums 배열에서 Majority Element를 찾는 것이 문제이다. 첫 풀이 Follow-up에서 나온 것처럼 시간복잡도를 $O(n)$, 공간복잡
nums라는 배열이 존재할 때 k 스탭만큼 오른쪽으로 회전시키는 문제이다. 이때, 마지막 인덱스의 원소의 다음 스탭은 처음 원소가 된다.첫 풀이는 가장 쉬운 방법으로 풀어봤다. 임시 배열 temp를 선언하고 이 배열에 회전한 결과를 저장한다. 그 다음 temp 배열의
Palindrome이란 모든 대문자를 소문자로 변환하고 숫자 또는 알파벳이 아닌 모든 문자를 제거한 뒤 문자열이 맨 앞과 맨 뒤부터 차례로 읽었을 때 앞의 문자와 뒤의 문자가 모두 동일한 문자열이다. 즉 abba와 같이 문자열의 중앙을 기준으로 대칭을 이루는 문자열이다
오름차순으로 정렬된 배열에서 두 원소를 골라 더한 값이 target이 되는 두 인덱스를 찾는 문제이다. 예를들어 numbers = \[2,7,11,15], target = 9이라면 2 + 7이 target인 9가 되기 때문에 \[1, 2]를 리턴하면 된다. 또한 반드시
자연수로 이루어진 nums 배열에서 합이 target 이상인 subarray 중 가장 짧은 길이를 리턴하는 문제이다.시작 인덱스(left)와 끝 인덱스(right) 사이의 모든 원소의 합(sum)을 관리하는 방법으로 sliding window으로 풀이하였다. left가
문제 문자열 s가 주어졌을 때 중복이 없는 문자열 중 가장 긴 문자열의 길이를 찾는 문제이다. 첫번째 풀이 지나번에 풀었던 Minimum Size Subarray Sum와 비슷해 Sliding window로 해결하였다. 문자가 반복된 횟수를 카운팅하면서 현재까지의
ListNode로 구현된 singly-linked list에서 사이클의 존재여부를 구하는 문제이다.문제를 보자마자 가장 쉽게 떠오르는 아이디어는 방문을 활용한 풀이이다. 노드를 next로 옮기면서 노드가 이미 방문한 노드이면 방문한 사이클이 존재하므로 true를 리턴한
비어있지 않은 두 LinkedList가 존재한다. 이 리스트에는 각 0~9의 숫자를 저장하는 노드들이 이어져있는데 노드의 역방향으로 숫자들을 이어붙인 숫자가 원래 숫자이다. 즉 342는 LinkedList의 노드들이 2 → 4 → 3 순으로 이어져있다. 이 문제는 각
문제 Min Stack은 기존 Stack과 거의 동일하지만 getMin() 메소드가 존재한다. getMin() 메소드는 현재까지 스택에 쌓인 값 중에 최소값을 리턴하는 함수이다. 문제는 Min Stack의 push(), pop(), top(), getMin() 메소
문자열로된 토큰 배열을 입력으로 준다. 각 토큰은 int형 숫자을 문자열로 나타낸 것이거나 연산자 +, -, \*, /로 이루어져있다. 또한 토큰의 순서는 후위 표기법으로 표현되어있다. 후위 표기법으로 표현된 토큰들을 계산하는 문제이다.후위 표기법의 계산은 Stack
두 개의 문자열 ransomNote와 magazine이 주어진다. magazine에 사용된 문자들로 ransomeNote 문자열을 만들 수 있으면 true, 만들 수 없으면 false를 리턴하는 문제이다.가장 쉬운 풀이는 magazine에 쓰인 문자들의 개수를 파악한뒤
int형 배열 nums가 주어졌을 때 임의의 i번째 인덱스의 원소와 i-k <= j <= i+k를 만족하는 j번째의 원소 중 같은 원소가 있다면 true를 리턴하고 없으면 false를 리턴한다.이 문제는 이중 반복문으로 쉽게 해결할 수 있다. i번째 인덱스를
int형 배열 nums가 주어진다. nums는 초기에는 정렬되어있으며 pivot만큼 왼쪽으로 회전한 배열이다. nums = 1, 2, 3, 4, 5, 6, 7, pivot = 3일 때 nums = 4, 5, 6, 7, 1, 2, 3이 된다.문제는 이렇게 만들어진 num
바이너리 서치 트리의 루트 노드가 주어지고 이 트리에 속한 임의의 두 노드를 선택했을 때 두 노드 값의 차이가 가장 작은 것을 리턴해야한다. 위 그림의 예제에서 값이 2인 노드와 1인 노드를 선택했을 때 값이 차이가 1로 가장 작기 때문에 1을 리턴하면 된다. 또는 4
Trie 자료구조의 삽입, 검색, 접두가 검색 함수를 구현하는 문제이다. Trie는 트리(Tree)의 일종으로 문자열을 효과적으로 저장하고 검색하기 위한 자료구조이다. 접두가 검색, 자동 완성, 사전 검색 등에 주로 사용된다.위 3가지 함수의 구현은 대체로 비슷하다.
이전에 풀었던 문제와 거의 동일하다. 접두사 검색이 존재하지 않는 대신 검색어에 .으로 와일드카드가 사용될 수 있다. 문제는 문자열 삽입과 검색하는 함수를 구현하면 된다.삽입 함수는 이전 문제와 동일하게 구현했다.문제는 검색어에 와일드 카드가 존재하는 검색 함수 구현이
정렬되지 않은 int형 배열 nums가 주어졌을 때 k번째로 큰 원소를 찾는 문제다. 단, k번째로 큰 원소는 유일한 값이 아닐 수 있으며 정렬을 사용하지 않고 풀어야한다.정렬을 사용하지 않고 가장 k번째 큰 원소를 찾는 방법으로 가장 효율적인 방법은 Heap을 사용하
아래 그림과 같이 무방향 그래프의 한 노드가 주어졌을 때 주어진 노드가 속한 무방향 그래프를 깊은복사하는 것이 문제이다.그림과 같이 완전히 새로운 노드를 생성해 원래 그래프와 똑같은 모양으로 연결을 시켜야한다.그래프를 복사하는 건 처음이다. 가장 처음 생각난 방법은 B
n\*n의 board에 대한 정보가 주어진다. 각 cell은 다음과 같은 방식으로 번호가 매겨진다.왼쪽 아래부터 1번이며 ㄹ 형태로 번호가 이어져있다. 문제는 다음과 같다.1번 cell부터 시작해 n\*n 번호 cell까지 가는데 던지는 최소 주사위 횟수를 구하는 것이