HASH(7)
-
[Hash Table] Find All Anagrams in a String
s와 p를 input으로 주는데, index=n에서 끊으면 p의 anagrams으로만 구성된 s의 부분집합을 찾으라는 문제이다 여기에는 sliding window라는 알고리즘을 적용할 수 있다 슬라이딩 윈도우는 배열의 일정 범위 값을 비교할때 유용하다 index를 두개 두고 범위만큼 조금씩 움직이는 방법이다 모든 배열의 요소를 일일이 체크할 필요가 없기 때문이다 s안에서 p의 anagram을 찾아야하기 때문에, left를 시작점, right를 p의 길이로 둔다 이후 left를 s의 길이가 되기 전까지 Loop에 돌려주는데, left-right구간만큼 배열을 substring하여 해당 구간을 sorting하고 비교한다. 이 둘이 같으면 시작index인 left를 결과에 집어넣는다 타임아웃 에러뜬다
2021.04.06 -
[Hash, Two Pointer] Longest Substring Without Repeating Characters
반복되는 character가 없는 최대 길이를 가진 부분 단어를 구하라 start, maxLen이라는 지표를 두고, map이라는 dictionary를 통해 비교한다. 하나씩 글자를 순회하면서 같은 문자가 이미 map에 있다면 start를 해당 map의 위치로 바꿔주고, 그것이 아니라면 그냥 set만 해준다. 이후 start가 고려된 현재 길이가 이전 maxLen보다 크다면 교체해준다.
2021.04.05 -
[Array, Hash] Subarray Sum Equals K
연속된 element로 구성된 nums의 부분집합 중, 합이 k가 되는 부분집합의 갯수를 리턴하라 각 부분합을 원소로 표현한 sum이라는 배열을 만들고, map이라는 딕셔너리를 만들었다. 그 후 sum에서 k를 뺀 값이 key로 딕셔너리에 존재하면 answer를 하나 추가해주었고, 그렇지 않으면 sum만 딕셔너리에 추가해주었다. 사실 골머리를 앓았던 문제라서 도식으로 정리해보았다. 두번째를 예시로 들어본다. [ 0, 1, 2, 3 ]이라는 배열이 들어왔을 때, 각 element를 연쇄적으로 더한 sum이라는 배열을 만들었다. 얘는 [ 0, 1, 3, 6 ]이 될 것이다. 실제 주어진 배열은 [ 1, 2, 3 ] 이지만 1개의 원소만 가진 부분합도 카운팅되므로 편의상 0을 넣었다. 저렇게 만든 sum 배열..
2021.03.31 -
[Hash] Group Anagrams
Anageam은 주어진 자음들로 위치를 바꾸어 만들 수 있는 글자를 말한다. 여기서는 anagram에 따라 원소를 그루핑하라는 문제이다. 예컨데 eat, tea, ate는 모두 a, t, e를 사용했으므로 같은 그룹으로 묶어주면 된다. 따라서 배열에 대해 Loop를 실행하면서 원소를 모두 split하여 sort한 값이 같은 애들끼리 묶어주면 된다. dic[w]가 기존에 있던것과 같다면 그대로 입력해주면 된다. 실제 콘솔을 확인해보면 다음과 같은 형태로 묶이게 될 것이다.
2021.03.27 -
[Hash] Top K Frequent Elements
배열과 K가 input으로 들어왔을때, 가장 frequently하게 나타나는 원소를 k개 리턴하라는 문제이다 간단하지만 hash를 이용한다는 점에서 기억할만하다 hash를 이용함은 결국 dictionary, 즉 key-value값으로 데이터를 관리한다는 뜻이다. hash라는 객체에 number-빈도로 데이터를 저장한다 그 뒤, 이 객체에 대해 value기준으로 내림차순 정렬한다. value가 큰 순서대로 k개를 세서 리턴해주면 된다.
2021.03.27 -
[Array] two sum
Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target. You may assume that each input would have exactly one solution, and you may not use the same element twice. You can return the answer in any order. 배열과 target이라는 정수가 주어질 때, 배열의 원소 두개를 더해 target이 될 수 있다면, 몇번째 자리의 원소 두개를 더했는지 리턴하라는 문제. 아무래도 시간복잡도가 중요한 문제가 되겠다. 처음에는 target을 기준으로..
2021.02.02