📌강의 정리
괄호가 제대로 성립하지 확인하는 문제이다.
스택이란 자료구조를 사용한다.
반복문으로 문자열을 반복하며 그 문자들을 봐서 ( 일때는 스택에 쌓고
) 일때는 스택에서 ( 를 뺀다.
이때 스택에 아무것도 없는데 ) 가 나오면 괄호가 성립안되므로 NO를 리턴한다.
반복이 끝나고 스택의 길이가 0이면 YES 아니면 NO이다.
📌느낀점
알고리즘을 구현하는건 쉬웠지만 문제를 제대로 이해하지못했다.
지금 생각해보면 괄호가 성립되어야 하므로 나중에 ) 가 스택0일때 나오면 NO가 맞고
또 알고리즘짤때도’ ) 가 먼저 나오면 어떻게 처리해야하지’ 를 생각했어야 했는데
그걸 생각못했다..
알고리즘 짤때 짜기전에 미리 생각을 많이 하고 흐름을 만들어둬야 한다.
//나의 코드
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(s) {
let answer = "YES";
let stk = [];
for (let x of s) {
if (x == "(") stk.push(x);
else stk.pop();
}
if (stk.length !== 0) answer = "NO";
return answer;
}
// 반복문을 돌려서 '('를 스택으로 배열에 쌓는다.
// 이때 ')'가 나오면 스택에서 "("를 빼주고
// 마지막에 배열내에 데이터가 있는지 확인한다.
let a = "(()(()))(()";
console.log(solution(a));
</script>
</body>
</html><html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(s) {
let answer = "YES";
stack = [];
for (let x of s) {
if (x === "(") stack.push(x);
else {
if (stack.length === 0) return "NO";
stack.pop();
}
}
if (stack.length > 0) return "NO";
return answer;
}
let a = "(()(()))(()";
console.log(solution(a));
</script>
</body>
</html>
//강사님 코드
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr1, arr2){
let answer=[];
let n=arr1.length;
let m=arr2.length;
let p1=p2=0;
while(p1<n && p2<m){
if(arr1[p1]<=arr2[p2]) answer.push(arr1[p1++]);
else answer.push(arr2[p2++]);
}
while(p1<n) answer.push(arr1[p1++]);
while(p2<m) answer.push(arr2[p2++]);
return answer;
}
let a=[1, 3, 5];
let b=[2, 3, 6, 7, 9];
console.log(solution(a, b));
</script>
</body>
</html>
'JS 알고리즘 문제풀이 > 섹션 6. 자료구조(스택, 큐)' 카테고리의 다른 글
6.공주구하기(큐) (0) | 2022.06.27 |
---|---|
5.쇠막대기(스택) (0) | 2022.06.26 |
4.후위식 (postfix) 연산(스택) (0) | 2022.06.25 |
3.크레인 인형뽑기(스택):카카오 (0) | 2022.06.24 |
2.괄호 문자 제거(스택) (0) | 2022.06.23 |