diff --git a/container-with-most-water/leehyeyun.js b/container-with-most-water/leehyeyun.js new file mode 100644 index 0000000000..4d639b187a --- /dev/null +++ b/container-with-most-water/leehyeyun.js @@ -0,0 +1,89 @@ +/** + * @param {number[]} height + * @return {number} + */ +/* +주어진 정수 배열 height는 여러 개의 세로 막대기 높이를 나타낸다. +각 막대기는 x축 위의 서로 다른 위치에 수직으로 세워져 있다. + +i번째 막대기의 좌표는 (i, 0)에서 (i, height[i])이다. + +이 막대기들 중에서 서로 다른 두 개의 막대기를 선택하면, +두 막대기와 x축이 만나 하나의 물을 담을 수 있는 용기(container)를 만들 수 있다. + +문제 목표: + - 두 막대기를 선택했을 때 + - 그 사이에 담을 수 있는 물의 양(면적)이 최대가 되도록 한다. + - 그 최대 물의 양을 반환한다. + +중요한 조건: + 1) 용기는 기울일 수 없다. (막대기는 항상 수직) + 2) 물의 높이는 선택한 두 막대기 중 더 낮은 높이로 결정된다. + 3) 물의 너비는 두 막대기 사이의 거리(인덱스 차이)이다. + +즉, + 물의 양 = (두 막대기 사이 거리) × (두 막대기 중 더 낮은 높이) + +입력 형식: + - height: 정수 배열 + - n == height.length + - 2 <= n <= 100,000 + - 0 <= height[i] <= 10,000 + +출력 형식: + - 담을 수 있는 최대 물의 양 (정수) + +예시: + + Example 1 + 입력: height = [1,8,6,2,5,4,8,3,7] + 출력: 49 + 설명: + - 여러 막대기 쌍 중 + - 특정 두 막대기를 선택했을 때 + - 거리와 높이의 곱이 가장 커짐 + - 그 최대값이 49 + + Example 2 + 입력: height = [1,1] + 출력: 1 + 설명: + - 두 막대기 사이 거리 = 1 + - 더 낮은 높이 = 1 + - 물의 양 = 1 × 1 = 1 +*/ + +var maxArea = function(height) { + + let leftIndex = 0; + let rightIndex = height.length - 1; + let maxValue = 0; + + while (leftIndex < rightIndex) { + const width = rightIndex - leftIndex; + let heightValue = 0; + if (height[leftIndex] < height[rightIndex]){ + heightValue = height[leftIndex]; + }else { + heightValue = height[rightIndex]; + } + const area = width * heightValue; + + if (area > maxValue) { + maxValue = area; + } + + if (height[leftIndex] < height[rightIndex]) { + leftIndex++; + } else { + rightIndex--; + } + } + + return maxValue; + +}; + +console.log(maxArea([1,8,6,2,5,4,8,3,7])) +console.log(maxArea([1,1])) + diff --git a/valid-parentheses/leehyeyun.js b/valid-parentheses/leehyeyun.js new file mode 100644 index 0000000000..42d9f288da --- /dev/null +++ b/valid-parentheses/leehyeyun.js @@ -0,0 +1,92 @@ +/** + * @param {string} s + * @return {boolean} + */ +/* +주어진 문자열 s는 괄호 문자로만 이루어져 있다. +사용 가능한 문자는 '(', ')', '{', '}', '[', ']' 총 6가지이다. + +문자열이 올바른 괄호 문자열인지 판단하라. + +올바른 괄호 문자열의 조건: + 1) 여는 괄호는 반드시 같은 종류의 닫는 괄호로 닫혀야 한다. + 2) 괄호는 올바른 순서로 닫혀야 한다. + (가장 마지막에 열린 괄호가 가장 먼저 닫혀야 함) + 3) 모든 닫는 괄호는 대응되는 여는 괄호가 있어야 한다. + +입력 형식 : + - s: 문자열 + - 1 <= s.length <= 10,000 + - s는 '()[]{}' 문자로만 구성됨 + +출력 형식 : + - 올바른 괄호 문자열이면 true + - 그렇지 않으면 false + +예시 : + + Example 1 + 입력 : s = "()" + 출력 : true + 설명 : + - '('가 ')'로 정상적으로 닫힘 + + Example 2 + 입력 : s = "()[]{}" + 출력 : true + 설명 : + - 모든 괄호가 종류와 순서에 맞게 닫힘 + + Example 3 + 입력 : s = "(]" + 출력 : false + 설명 : + - 여는 괄호 '('와 닫는 괄호 ']'의 종류가 다름 + + Example 4 + 입력 : s = "([])" + 출력 : true + 설명 : + - 괄호가 중첩되어 있으나 순서와 종류 모두 올바름 + + Example 5 + 입력 : s = "([)]" + 출력 : false + 설명 : + - 괄호의 닫히는 순서가 올바르지 않음 +*/ +var isValid = function (s) { + const stack = []; + + for (var char of s) { + if(char == "(" || char == "{" || char == "[") + { + stack.push(char); + }else { + const last = stack[stack.length - 1]; + if(char == ")" && last == "("){ + stack.pop(); + }else if (char == "}" && last == "{"){ + stack.pop(); + }else if (char == "]" && last == "["){ + stack.pop(); + }else { + return false; + } + } + } + + if(stack.length == 0) + { + return true; + }else { + return false + } +}; + +console.log(isValid("()")) +console.log(isValid("()[]{}")) +console.log(isValid("(]")) +console.log(isValid("([])")) +console.log(isValid("([)]")) +