본문 바로가기

전체 글657

[Leetcode] 203. Remove Linked List Elements 문제 : https://leetcode.com/problems/remove-linked-list-elements/ 링크드 리스트의 헤드와 정수값 val 이 주어지면 링크드 리스트들 중 노드 값이 val 과 같은 노드들은 제거한 뒤 헤드를 반환하라. head 부터 탐색하면서 만일 탐색 중인 노드 값이 val이 아니라면 다음 노드를 탐색한다. 만일 삭제해야 하는 노드라면 탐색 중인 노드의 바로 전 노드에 탐색 중인 노드의 next 노드를 연결한다. 이를 위해 최근에 탐색한 노드를 별도의 변수에 저장하고 있어야 한다. 만일 삭제될 노드가 head 노드라면 탐색중인 노드의 next 노드를 새로운 head 노드로 세팅한다. 시간복잡도는 O(N). N = 링크드 리스트 노드 개수. 소스코드 : https://git.. 2021. 11. 13.
[Leetcode] 1413. Minimum Value to Get Positive Step by Step Sum 문제 : https://leetcode.com/problems/minimum-value-to-get-positive-step-by-step-sum/ 정수형 배열 nums가 주어질 때, nums 정수들을 처음부터 하나씩 수를 더해나갈 때 단계별 더하는 수가 항상 양수가 되도록 하는 최소 초기값 양수 startValue를 구하라. nums 배열을 앞에서부터 탐색하면서 부분합을 구한다. 구한 부분합들 중 최소값을 구해서 (최소값 x -1) + 1 한 값이 정답이 되는데 정답은 양수여야 하므로 만일 이 값이 양수가 아니라면 1을 반환한다. 소스코드 : https://github.com/fpdjsns/Algorithm/blob/master/leetcode/easy/1413.%20Minimum%20Value%20t.. 2021. 11. 11.
[Leetcode] 77. Combinations 문제 : https://leetcode.com/problems/combinations/ 백트래킹 문제. for(i = 현재 탐색중인 인덱스 ~ n){ arr 배열 뒤에 i 추가 재귀함수(i+1, arr); // 인덱스를 i+1부터 다시 탐색 arr 배열 뒤에 i 제거 } 위와 같은 재귀함수를 만들어서 arr 배열 크기가 k라면 정답 배열에 arr을 추가한다. 시간복잡도는 K크기의 배열을 만들므로 대충 O(N! / (N-K)!) 이 정도 나올듯. 소스코드 : https://github.com/fpdjsns/Algorithm/blob/master/leetcode/medium/77.%20Combinations.cpp 2021. 11. 10.
[Leetcode] 43. Multiply Strings 문제 : https://leetcode.com/problems/multiply-strings/ 음이 아닌 정수 num1, num2가 문자열로 주어질 때, num1, num2의 곱을 구하라. index 0 1 2 1 2 3 x 4 5 6(v) ----------- 1 8 1 2 6 ind 0 1 2 1 2 3 x 4 5(v) 6 ----------- 1 5 1 0 5 ind 0 1 2 1 2 3 x 4(v) 5 6 ----------- 1 2 8 4 index 0 1 2 3 4 5 1 8 1 2 6 1 5 1 0 5 1 2 8 +. 4 -------------------- 0 5 5 8 8 8 123 * 456 을 예로 들어보자. 한자리 수 씩 곱하는 경우 최소 한자리 최대 두자리가 나온다. (최대 : 9.. 2021. 11. 8.
[Leetcode] 94. Binary Tree Inorder Traversal 문제 : https://leetcode.com/problems/binary-tree-inorder-traversal/ 이진 트리의 루트가 입력값으로 주어지면 중위 순회한 결과를 반환해라. 재귀함수를 하나만들고 왼쪽 자식 노드로 탐색. 현재 노드의 값을 정답 배열에 저장. 오른쪽 자식 노드로 탐색. 만일 현재 탐색하는 노드가 null 이면 재귀함수를 종료한다. 시간복잡도는 O(N). N = 이진트리 노드 수 소스코드 : 2021. 11. 5.
[Leetcode] 67. Add Binary 문제 : https://leetcode.com/problems/add-binary/ carry 플래그를 하나두고 a, b 문자열의 가장 뒤에서부터 수를 더해간다. (a + b + carry) / 2 나머지를 정답 문자열에 추가하고 (a + b + carry) / 2 몫을 carry에 저장한다. 이를 a, b 문자열들 중 하나의 문자열이 모두 탐색할때까지 반복한다. 이 후 a, b 문자열들 중 아직 탐색하지 않은 문자들이 남았다면 탐색이 끝날때까지 위와 같이 (남은 숫자 문자 + carry) / 2 나머지를 정답에 추가해나간다. 시간복잡도는 O(N). N = a, b 문자열들 중 최장 길이 소스코드 : https://github.com/fpdjsns/Algorithm/blob/master/leetcode/.. 2021. 11. 4.