일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리트코드
- [파이썬 실습] 중급 문제
- 자바스크립트 날씨 웹 만들기
- 자바스크립트 날씨
- [파이썬 실습] 심화 문제
- 엘리스 AI 트랙 5기
- 프론트개발공부
- reactnativecli
- JavaScript
- HTML
- 자바스크립트 reduce()
- 엘리스
- 부트캠프
- [AI 5기] 연습 문제집
- 간단한 날씨 웹 만들기
- [파이썬 실습] 기초 문제
- 코드스테이츠
- 엘리스 ai 트랙
- 프로그래머스
- 자바스크립트 sort()
- 삼항연산자
- RN 프로젝트
- 날씨 웹 만들기
- 자바스크립트 split()
- leetcode
- 프론트개발
- 자바스크립트
- 개발일기
- 개발공부
- 코딩부트캠프
- Today
- Total
개발조각
[리트코드] 20. Valid Parentheses 본문
안녕하세요. 개발조각입니다.😊
이번 문제는 알고리즘 문제 풀면 무조건 보는 문제인 것 같아요.
저도 이전에 프로그래머스에서 풀었었는데 또 보니까 반갑네요.
https://leetcode.com/problems/valid-parentheses/
Valid Parentheses - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
이번 문제는 쉬우니 빠르게 해결방안에 대해 설명하겠습니다.
해결방안
var isValid = function(s) {
bracketMap = {
'(':')',
'{':'}',
'[':']',
};
branckes = [];
for(i of s){
let len = branckes.length;
if(bracketMap[i]) branckes.push(i);
else{
if(!len) return false;
if(i === bracketMap[branckes[len-1]]) branckes.pop();
else return false;
}
}
return branckes.length ? false : true;
};
간단하게 개념에 대해 설명을 하자면
branckes = []를 만들어
- '(', '{', '['일 경우 branckes에 넣어주고
- ')', '}', ']'일 경우 branckes의 마지막 원소가 ')', '}', ']'에 짝에 맞는 '(', '{', '['이면 제거를 해줍니다.
- 짝이 안맞을 경우는 괄호의 짝이 안 맞는 경우이기 때문에 바로 false를 해줍니다.
왜 이렇게 했는지는 아래 이미지를 보시면 알 것 같습니다.
이렇게 진행을 하면 짝이 맞는 괄호이면
brancket = [ ] 이렇게 빈배열로 나오고 아닐 경우는 brancket배열 안에 원소가 있겠죠.
사실 위에있는 설명대로 코드를 짜면 통과는 되겠지만
효율을 위해 중간에 false가 될 수 있을 값을 미리 제거를 해줘야 됩니다.
예를 들어 아래와 같은 경우가 있습니다.
- ){}
이와같이 s[0]이 '(', '{', '['이 아닌 ')', '}', ']'경우에는 짝이 맞는 괄호인지 확인할 필요도 없겠죠.
bracketMap = {
'(':')',
'{':'}',
'[':']',
};
문제가 단순하게 ()만 써서 맞는 괄호인지 찾는 문제면 안써도 되는데
이번 문제는 (), {}, []이렇게 3가지를 괄호의 짝이 맞는지 찾는 문제라 object형태로 나타냈습니다.
branckes = [];
for(i of s){
let len = branckes.length;
if(bracketMap[i]) branckes.push(i);
else{
if(!len) return false;
if(i === bracketMap[branckes[len-1]]) branckes.pop();
else return false;
}
}
for of문을 사용해서 문자열s의 각각의 괄호가 나오게 해주었고
if(bracketMap[i]) branckes.push(i);
이러한 조건문을 넣어
'(', '{', '[' 경우에 branckes배열에 넣어주었습니다.
else{
if(!len) return false;
if(i === bracketMap[branckes[len-1]]) branckes.pop();
else return false;
}
else경우는 ')', '}', ']'일 경우겠죠
if(!len) return false;
이전에 '){}' 와 같은 테스트 케이스도 발생할 수 있기 때문에 이와 같은 조건을 넣어주었습니다.
if(i === bracketMap[branckes[len-1]]) branckes.pop();
else return false;
그리고 해당 괄호가 짝이 맞는지 확인하고 맞으면 branckes의 마지막 원소를 제거하고
아닐 경우 false를 리턴해주었습니다.
return branckes.length ? false : true;
마지막으로 s='{{{{{{{{'일 경우도 존재하니 이와같은 조건문을 써주었습니다.
'알고리즘🅰 > 리트코드' 카테고리의 다른 글
[리트코드] 26. Remove Duplicates from Sorted Array (0) | 2022.09.25 |
---|---|
[리트코드] 22. Generate Parentheses (0) | 2022.09.25 |
[리트코드] 18. 4Sum (0) | 2022.09.21 |
[리트코드] 17. Letter Combinations of a Phone Number (0) | 2022.09.20 |
[리트코드] 16. 3Sum Closest (0) | 2022.09.19 |