diff --git a/best-time-to-buy-and-sell-stock/HerrineKim.js b/best-time-to-buy-and-sell-stock/HerrineKim.js new file mode 100644 index 000000000..71f648d89 --- /dev/null +++ b/best-time-to-buy-and-sell-stock/HerrineKim.js @@ -0,0 +1,24 @@ +// 시간복잡도: O(n) +// 공간복잡도: O(1) + +// 최소값을 계속 갱신하면서 최대 이익을 계산 + +/** + * @param {number[]} prices + * @return {number} + */ +var maxProfit = function (prices) { + let minPrice = Infinity; + let maxProfit = 0; + + for (let price of prices) { + if (price < minPrice) { + minPrice = price; + } else { + maxProfit = Math.max(maxProfit, price - minPrice); + } + } + + return maxProfit; +}; + diff --git a/group-anagrams/HerrineKim.js b/group-anagrams/HerrineKim.js new file mode 100644 index 000000000..10c04d37b --- /dev/null +++ b/group-anagrams/HerrineKim.js @@ -0,0 +1,25 @@ +// 시간복잡도: O(n * m log m) +// 공간복잡도: O(n) + +// HashMap 사용 +// 각 문자열을 정렬하여 키로 사용 +// 정렬된 문자열을 키로 사용하여 그룹화 + +/** + * @param {string[]} strs + * @return {string[][]} + */ +var groupAnagrams = function (strs) { + const map = {}; + + for (const str of strs) { + const key = str.split('').sort().join(''); + if (!map[key]) { + map[key] = []; + } + map[key].push(str); + } + + return Object.values(map); +}; +