diff --git a/contains-duplicate/grapefruit13.ts b/contains-duplicate/grapefruit13.ts new file mode 100644 index 0000000000..c98219cbf3 --- /dev/null +++ b/contains-duplicate/grapefruit13.ts @@ -0,0 +1,16 @@ +/** + * @description nums 배열에서 중복 숫자 확인 + * @param nums - 숫자 배열 + * @returns boolean - 중복 숫자 여부 + */ +const containsDuplicate = (nums: number[]) => { + const hasSeen = new Set(); + + for (const num of nums) { + if (hasSeen.has(num)) { + return true; + } + hasSeen.add(num); + } + return false; +}; diff --git a/two-sum/grapefruit13.ts b/two-sum/grapefruit13.ts new file mode 100644 index 0000000000..42ca5315b8 --- /dev/null +++ b/two-sum/grapefruit13.ts @@ -0,0 +1,18 @@ +/** + * @description nums 배열에서 두 수를 더해 target을 만족하는 인덱스를 반환 + * @param {number[]} nums - 숫자 배열 + * @param {number} target - 목표 숫자 + * @return {number[]} - 두 수의 인덱스 + */ +var twoSum = function (nums, target) { + const map = new Map(); + + for (let i = 0; i < nums.length; i++) { + const current = nums[i]; + const needed = target - current; + if (map.has(needed)) { + return [map.get(needed), i]; + } + map.set(current, i); + } +}; diff --git a/valid-anagram/grapefruit13.ts b/valid-anagram/grapefruit13.ts new file mode 100644 index 0000000000..1e378d8e79 --- /dev/null +++ b/valid-anagram/grapefruit13.ts @@ -0,0 +1,30 @@ +/** + * @description 두 문자열이 애너그램인지 판별 (문자의 종류와 개수가 완전히 동일한지 확인) + * @param {string} s - 문자열 1 + * @param {string} t - 문자열 2 + * @returns {boolean} - 애너그램 여부 + */ +function isAnagram(s: string, t: string): boolean { + // 길이가 다르면 애너그램일 수 없음 + if (s.length !== t.length) return false; + + // 입력이 소문자 영어로 제한되므로 "a"~"z" 26칸 고정 배열 사용 (공간 O(1)) + const LOWER_ALPHABET_COUNT = 26; + const count = new Array(LOWER_ALPHABET_COUNT).fill(0); + + // 'a'의 아스키 코드 (문자를 0~25 인덱스로 매핑하기 위함) + const BASE = "a".charCodeAt(0); + + // s는 +1, t는 -1 + // 모든 문자의 개수가 동일하면 최종적으로 모든 값은 0이 됨 + for (let i = 0; i < s.length; i++) { + count[s.charCodeAt(i) - BASE]++; + count[t.charCodeAt(i) - BASE]--; + } + + // 하나라도 0이 아니면 개수가 다름 → 애너그램 아님 + return count.every((value) => value === 0); +} + +// 시간 복잡도: O(n) +// 공간 복잡도: O(1)