일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Cypress
- 이분 검색
- dfs
- recoil
- 리터럴 타입
- 타입 좁히기
- 반공변성
- 인터섹션
- useAppDispatch
- CI/CD
- 태그된 유니온
- RTK Query
- 호이스팅
- 투포인터
- TS
- 공변성
- webpack
- autosize
- CORS
- 무한 스크롤
- ESlint
- 결정 알고리즘
- React
- tailwind
- Promise
- map
- SSR
- async/await
- Jest
- app router
Archives
- Today
- Total
짧은코딩
쇠막대기 본문
반응형
해결법
이 문제는 스택으로 해결할 수 있다. 만약 괄호가 "("이면 스택에 넣는다. 그러다가 ")"를 만나면 2가지 케이스로 나뉜다. 우선 무조건 스택에 있는 "(" 1개를 삭제한다. 그리고 앞이 "("이면 레이저라서 스택에 있는 "(" 개수만큼 answer에 더해준다. 앞이 ")"이면 막대가 끝난거라서 잘리고 남아있는 막대 1개를 answer에 더해준다.
코드
<html>
<head>
<meta charset="UTF-8" />
<title>출력결과</title>
</head>
<body>
<script>
function solution(s) {
let answer = 0;
let ary = [];
for (let i = 0; i < s.length; i++) {
if (s[i] === "(") {
ary.push(s[i]);
} else if (s[i] === ")" && s[i - 1] === "(") {
ary.pop();
answer += ary.length;
} else {
ary.pop();
answer += 1;
}
}
return answer;
}
let a = "()(((()())(())()))(())";
console.log(solution(a));
</script>
</body>
</html>
반응형
'코딩테스트 with JS > 자바스크립트 알고리즘 문제풀이(인프런)' 카테고리의 다른 글
LRU(Least Recently Used) (0) | 2022.12.05 |
---|---|
공주 구하기 (0) | 2022.09.09 |
모든 이나그램 찾기(해쉬, 투포인터, 슬라이딩 윈도우) (0) | 2022.08.28 |
학급 회장(해쉬, Map) (0) | 2022.08.26 |
연속 부분수열 1(투포인터) (0) | 2022.08.24 |
Comments