728x90
반응형
아마 문자열과 관련이 되어있는 문제일 듯 해서 문자열 관련 메서드를 찾아보았다.
하단의 블로그를 참조하였다.
[JS] 📚 자바스크립트 String 메소드 💯 총정리
자바스크립트 String 메소드 String 객체는 원시 타입인 문자열을 다룰 때 유용한 프로퍼티와 메소드를 제공하는 레퍼(wrapper) 객체이다. 변수 또는 객체 프로퍼티가 문자열을 값으로 가지고 있다
inpa.tistory.com
또한 문자열의 특정 문자 개수 세는 법을 찾았다.
https://deeplify.dev/front-end/js/count-characters-in-string
[Js/자바스크립트] 문자열의 특정 문자 개수 세는 방법
Javascript 문자열에서 특정 문자의 개수를 세는 방법에 대해서 소개합니다.
deeplify.dev
그래서 첫시도는 아래와 같이 풀었지만 실패했다.
대충 논리는 "(" 그리고 ")" 의 갯수가 같으면서도
string.lastIndexOf를 써서 ")" 가 "(" 보다 먼저 나오면 false를 하게 해주고 싶었다.
function solution(s){
var count1 = 0;
var count2 = 0;
var count3= 0;
var open = "(";
var close = ")";
var openNumber = s.indexOf(open);
var closeNumber = s.indexOf(close);
while (openNumber !== -1) {
count1++;
openNumber = s.indexOf(open, openNumber + 1);
}
while (closeNumber !== -1) {
count2++;
closeNumber = s.indexOf(close, closeNumber + 1);
}
if (count1 !== count2) {
answer = false
}
else if (s.lastIndexOf(close) < s.lastIndexOf(open) ){ answer= false}
else{ answer = true}
return answer;
}
결과는 처참했다.
효율성 테스트를 실패해서 아래와 같이 다시 풀었다.
function solution(s) {
let count = 0;
for (let i = 0; i < s.length; i++) {
count += s[i] === "(" ? 1 : -1;
if (count < 0) return false;
}
return count !== 0 ? false : true;
}
개인적으로 훨씬 깔끔한 느낌이긴 했다.
아무튼 이번 문제를 통해서 올바른 괄호인지 판단할 때, 배운점은
[ ] 배열 안에서 올바른 괄호가 되면 서로 상쇄하는 느낌으로 짜는 것. count를 1, -1로 이렇게 해서 0이면 서로 올바른 괄호인 것.
그리고 닫힌 괄호가 먼저 나온다는 판단을 count <0 것으로 판단하는것이 관건이였다.
'🍀 코딩 테스트 > 알감자 스터디 (알고리즘 감 잃지말자)' 카테고리의 다른 글
4주차 문제 (영어 끝말잇기) (0) | 2022.07.18 |
---|---|
3주차 문제 (위장) (0) | 2022.07.06 |
2주차 문제 (JadenCase 문자열 만들기) (0) | 2022.06.29 |