해시테이블 Hash table
·
🧩 Algorithm
해시테이블이란? https://en.wikipedia.org/wiki/Hash_table HashMap이라고도 알려진 해시 테이블(HashTable)은 키(Key)를 값(Value)로 매핑하는 추상 데이터 유형입니다. 내부적으로 연관 배열(associative array)나 딕셔너리(dictionary)을 사용하여 데이터를 저장합니다. 각 키Key에 해시 함수를 사용하여 해시코드라고도 하는 인덱스(index)를 생성하고 이 index 위치에 값(Value)가 저장됩니다. colors = { "Red" : "#FF0000", "Green" : "#00FF00", "Blue" : "#0000FF", "White" : "#FFFFFF", "Black" : "#000000", "Yellow" : "#FFFF00..
LeetCode : 383. Ransom Note
·
🧩 Algorithm
문제 링크 문제 먼저 읽기 두 문자열 ransomNote와 magazine이 주어졌을 때, magazine의 문자를 사용하여 ransomNote를 구성할 수 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다. magazine 문자는 ransomNote에서 한 번만 사용할 수 있습니다. Input: ransomNote = "aa", magazine = "ab" Output: false 어떻게 풀까? 생각 HashMap을 사용해서 magazine 의 문자 개수를 더하고하고, ransomNote 문자를 순회하면서 HashMap에 저장된 문자 개수를 차감하여 magaziine의 모든 문자들로 ransomNote를 이룰 수 있는 지 확인해본다. 이 방법으로 했을 때 O(2N)의 시간 복잡도가 들 것..
LeetCode : 155. Min Stack
·
🧩 Algorithm
문제 링크 문제 먼저 읽기 푸시, 팝, 탑, 최소 요소 검색을 일정 시간 내에 지원하는 스택을 구현하시오. 어떻게 풀까? 생각 ArrayList 혹은 int[]로 구현해볼 수 있다. 수도코드 class MinStack { private List stack; private List minStack; // 최소값 저장 스택 public MinStack() { // 스택 초기화 this.stack = new ArrayList(); this.minStack = new ArrayList(); } public void push(int val) { if (stack.size() == 0) { // 첫요소일 때. 처음에 이부분을 생각하지 못해서 emptyStackException이 발생했었다. this.minStack..
LeetCode : 150. Evaluate Reverse Polish Notation
·
🧩 Algorithm
문제 링크 문제 먼저 읽기 문자 배열이 주어집니다. 문자는 각각 사칙 연산 1글자씩이거나 숫자인데 Reverse Polish Notation (후위 표기법)산술식을 나타냅니다. 연산의 결과를 반환하세요. Input: tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"] Output: 22 Explanation: ((10 * (6 / ((9 + 3) * -11))) + 17) + 5 = ((10 * (6 / (12 * -11))) + 17) + 5 = ((10 * (6 / -132)) + 17) + 5 = ((10 * 0) + 17) + 5 = (0 + 17) + 5 = 17 + 5 = 22 그 외 조건 1
LeetCode : 167. Two Sum II - Input Array Is Sorted
·
🧩 Algorithm
문제 링크 문제 먼저 읽기 오름차순으로 정렬되고 인덱스 1부터 시작하는 배열이 주어집니다. 합하여 특정 목표 숫자를 만드는 두 인덱스를 정수 배열로 반환하세요. 반환되는 정수 배열은 [index1, index2] 로 길이가 2이며 index1 < index2 입니다. 반드시 하나의 해결책이 있습니다. 동일한 요소를 2번 쓸 일은 없습니다. 어떻게 풀까? 생각 2개의 pointer로 합을 비교합니다. pointer는 양 끝에 위치하여 한쪽 방향으로만 움직이게 합니다. target number와 같으면 멈추고 반환합니다. 수도코드 class Solution { public int[] twoSum(int[] numbers, int target) { int pointerA = 0; int pointerB = n..
LeetCode : 125. Valid Palindrome
·
🧩 Algorithm
문제 링크 문제 먼저 읽기 어떤 문자 s가 주어질 때, Palindrome 조건인 문자열이면 ture를 반환합니다. Palindrome 는 모든 대문자를 소문자로 변환 후 영어 혹은 숫자가 아닌 문자를 제거한 후 앞뒤가 같은 문자를 말합니다. Input: s = "A man, a plan, a canal: Panama" Output: true 어떻게 풀까? 생각 양 끝부터 중앙으로 향하는 포인터를 사용하여 다른 것이 나오면 false를 반환해보면 어떨까? 이경우 시간복잡도 O(n/2)가 될 것이라 예상됩니다. 영어나 숫자가 아닌 다른 문자가 나오면 다음으로 문자를 가르키도록 합니다. 수도코드 class Solution { public boolean isPalindrome(String s) { int po..