728x90
📖 문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
✔️ 제한조건
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
s | answer |
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
"()))((()" | false |
"(((())))" | true |
💻 나의 코드
function solution(s){
let arr = [...s];
let left = '(';
let left_cnt = 0;
if(arr[0] === ")" || arr[arr.length-1] === "("){
return false;
}
arr.forEach(function(element, idx){
if(element === left) left_cnt++;
else if(left_cnt != 0) left_cnt--;
});
return (left_cnt === 0 ? true : false);
}
🎤 코드 설명
- spread operator(...)로 s의 원소를 나열한 배열 arr을 초기화합니다.
- 왼쪽 괄호 여부를 확인할 left 변수를 '('로 초기화합니다.
- 왼쪽 괄호의 개수를 셀 left_cnt 변수를 0으로 초기화합니다.
- 배열 arr의 인덱스 0번 요소가 오른쪽 괄호 ) 이거나, 마지막 인덱스 요소가 왼쪽 괄호 ( 라면 바로 false를 return해줍니다.
- forEach()를 사용해서 arr배열의 요소를 하나씩 꺼냅니다.
- 꺼낸 요소가 left(왼쪽 괄호)라면 left_cnt를 1씩 증가시킵니다.
- 꺼낸 요소가 left(왼쪽 괄호)가 아니고, left_cnt가 1 이상인 상태라면 left_cnt를 1씩 감소시킵니다. (left_cnt가 1 이상인지 확인한 이유는 1이 넘지 않으면 짝이 맞지 않단 뜻이기 때문입니다.)
- 결과적으로 left_cnt가 0이 되면 오른쪽 괄호와 왼쪽 괄호의 개수가 같단 뜻이므로 true를 return합니다. (삼항 연산자 사용)
📜 채점 결과
정확성: 69.5
효율성: 30.5
합계: 100.0 / 100.0
💬 배운 것
- 문자열을 배열로 변환할 때 spread operator(...)이 split()함수보다 효율적입니다. (빠릅니다)
- 삼항 연산자를 사용하면 if문으로 작성한 여러 줄의 코드를 한 줄로 편하게 바꿀 수 있습니다.
- forEach()함수의 첫 번째 인자인 callback함수의 매개변수로 currentValue(item)과 index를 모두 넣어야 효율적입니다. (빠릅니다) 아마 함수 내부적으로 idx가 있으면 그 다음 값을 빨리 찾을 수 있는 게 이유인 것 같습니다.
코딩테스트 연습 - 올바른 괄호
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어 "()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은
programmers.co.kr
728x90
'코딩테스트 > Programmers (프로그래머스)' 카테고리의 다른 글
[프로그래머스] 프린터 - Javascript (Lv.2) (0) | 2021.04.25 |
---|---|
[프로그래머스] 최댓값과 최솟값 - Javascript (Lv.2) (0) | 2021.04.25 |
[프로그래머스] JadenCase 문자열 만들기 - Javascript (Lv.2) (0) | 2021.04.22 |
[프로그래머스] 기능 개발 - Javascript (Lv.2) (0) | 2021.04.21 |
[프로그래머스] 실패율 - Javascript (Lv.1) (0) | 2021.04.20 |