Skip to content

Commit 47786cc

Browse files
authored
Merge pull request #2203 from leehyeyun/main
[leehyeyun] WEEK 06 solutions
2 parents 58f3b8d + 83e3f10 commit 47786cc

File tree

2 files changed

+181
-0
lines changed

2 files changed

+181
-0
lines changed
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
/**
2+
* @param {number[]} height
3+
* @return {number}
4+
*/
5+
/*
6+
주어진 정수 배열 height는 여러 개의 세로 막대기 높이를 나타낸다.
7+
각 막대기는 x축 위의 서로 다른 위치에 수직으로 세워져 있다.
8+
9+
i번째 막대기의 좌표는 (i, 0)에서 (i, height[i])이다.
10+
11+
이 막대기들 중에서 서로 다른 두 개의 막대기를 선택하면,
12+
두 막대기와 x축이 만나 하나의 물을 담을 수 있는 용기(container)를 만들 수 있다.
13+
14+
문제 목표:
15+
- 두 막대기를 선택했을 때
16+
- 그 사이에 담을 수 있는 물의 양(면적)이 최대가 되도록 한다.
17+
- 그 최대 물의 양을 반환한다.
18+
19+
중요한 조건:
20+
1) 용기는 기울일 수 없다. (막대기는 항상 수직)
21+
2) 물의 높이는 선택한 두 막대기 중 더 낮은 높이로 결정된다.
22+
3) 물의 너비는 두 막대기 사이의 거리(인덱스 차이)이다.
23+
24+
즉,
25+
물의 양 = (두 막대기 사이 거리) × (두 막대기 중 더 낮은 높이)
26+
27+
입력 형식:
28+
- height: 정수 배열
29+
- n == height.length
30+
- 2 <= n <= 100,000
31+
- 0 <= height[i] <= 10,000
32+
33+
출력 형식:
34+
- 담을 수 있는 최대 물의 양 (정수)
35+
36+
예시:
37+
38+
Example 1
39+
입력: height = [1,8,6,2,5,4,8,3,7]
40+
출력: 49
41+
설명:
42+
- 여러 막대기 쌍 중
43+
- 특정 두 막대기를 선택했을 때
44+
- 거리와 높이의 곱이 가장 커짐
45+
- 그 최대값이 49
46+
47+
Example 2
48+
입력: height = [1,1]
49+
출력: 1
50+
설명:
51+
- 두 막대기 사이 거리 = 1
52+
- 더 낮은 높이 = 1
53+
- 물의 양 = 1 × 1 = 1
54+
*/
55+
56+
var maxArea = function(height) {
57+
58+
let leftIndex = 0;
59+
let rightIndex = height.length - 1;
60+
let maxValue = 0;
61+
62+
while (leftIndex < rightIndex) {
63+
const width = rightIndex - leftIndex;
64+
let heightValue = 0;
65+
if (height[leftIndex] < height[rightIndex]){
66+
heightValue = height[leftIndex];
67+
}else {
68+
heightValue = height[rightIndex];
69+
}
70+
const area = width * heightValue;
71+
72+
if (area > maxValue) {
73+
maxValue = area;
74+
}
75+
76+
if (height[leftIndex] < height[rightIndex]) {
77+
leftIndex++;
78+
} else {
79+
rightIndex--;
80+
}
81+
}
82+
83+
return maxValue;
84+
85+
};
86+
87+
console.log(maxArea([1,8,6,2,5,4,8,3,7]))
88+
console.log(maxArea([1,1]))
89+

valid-parentheses/leehyeyun.js

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/**
2+
* @param {string} s
3+
* @return {boolean}
4+
*/
5+
/*
6+
주어진 문자열 s는 괄호 문자로만 이루어져 있다.
7+
사용 가능한 문자는 '(', ')', '{', '}', '[', ']' 총 6가지이다.
8+
9+
문자열이 올바른 괄호 문자열인지 판단하라.
10+
11+
올바른 괄호 문자열의 조건:
12+
1) 여는 괄호는 반드시 같은 종류의 닫는 괄호로 닫혀야 한다.
13+
2) 괄호는 올바른 순서로 닫혀야 한다.
14+
(가장 마지막에 열린 괄호가 가장 먼저 닫혀야 함)
15+
3) 모든 닫는 괄호는 대응되는 여는 괄호가 있어야 한다.
16+
17+
입력 형식 :
18+
- s: 문자열
19+
- 1 <= s.length <= 10,000
20+
- s는 '()[]{}' 문자로만 구성됨
21+
22+
출력 형식 :
23+
- 올바른 괄호 문자열이면 true
24+
- 그렇지 않으면 false
25+
26+
예시 :
27+
28+
Example 1
29+
입력 : s = "()"
30+
출력 : true
31+
설명 :
32+
- '('가 ')'로 정상적으로 닫힘
33+
34+
Example 2
35+
입력 : s = "()[]{}"
36+
출력 : true
37+
설명 :
38+
- 모든 괄호가 종류와 순서에 맞게 닫힘
39+
40+
Example 3
41+
입력 : s = "(]"
42+
출력 : false
43+
설명 :
44+
- 여는 괄호 '('와 닫는 괄호 ']'의 종류가 다름
45+
46+
Example 4
47+
입력 : s = "([])"
48+
출력 : true
49+
설명 :
50+
- 괄호가 중첩되어 있으나 순서와 종류 모두 올바름
51+
52+
Example 5
53+
입력 : s = "([)]"
54+
출력 : false
55+
설명 :
56+
- 괄호의 닫히는 순서가 올바르지 않음
57+
*/
58+
var isValid = function (s) {
59+
const stack = [];
60+
61+
for (var char of s) {
62+
if(char == "(" || char == "{" || char == "[")
63+
{
64+
stack.push(char);
65+
}else {
66+
const last = stack[stack.length - 1];
67+
if(char == ")" && last == "("){
68+
stack.pop();
69+
}else if (char == "}" && last == "{"){
70+
stack.pop();
71+
}else if (char == "]" && last == "["){
72+
stack.pop();
73+
}else {
74+
return false;
75+
}
76+
}
77+
}
78+
79+
if(stack.length == 0)
80+
{
81+
return true;
82+
}else {
83+
return false
84+
}
85+
};
86+
87+
console.log(isValid("()"))
88+
console.log(isValid("()[]{}"))
89+
console.log(isValid("(]"))
90+
console.log(isValid("([])"))
91+
console.log(isValid("([)]"))
92+

0 commit comments

Comments
 (0)