문제링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12909
문제설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
입력 형식
입력으로 지도의 한 변 크기 n 과 2개의 정수 배열 arr1, arr2가 들어온다.
- 1 ≦ n ≦ 16
- arr1, arr2는 길이 n인 정수 배열로 주어진다.
- 정수 배열의 각 원소 x를 이진수로 변환했을 때의 길이는 n 이하이다. 즉, 0 ≦ x ≦ 2n - 1을 만족한다.
출력 형식
원래의 비밀지도를 해독하여 '#', 공백으로 구성된 문자열 배열로 출력하라.
나의 풀이 ✨
function solution(s){
if(s[0] === ")") return false;
let number = 0;
for(let i = 0; i <= s.length - 1; i++){
(s[i] === "(") ? number+=1 : number-=1;
if(number < 0) return false;
}
return (number === 0) ? true : false;
}
• 우선 올바른 괄호를 만들기 위해서는 "(" 의 개수와 ")"의 개수가 똑같아야 하며, 처음 괄호가 ")"로 시작하면 안된다.
• 괄호의 개수를 알기 위한 number라는 변수를 선언하고, 반복문으로 ")"면 -1을 "(" 이면 +1을 해주어 0보다 작아질경우 바로 flase를 return을 해주고 마지막에 number를 0과 비교하여 true 혹은 false를 return 해준다.
• 위에 효율성 테스트의 실패를 피할려면 함수 처음에 괄호가 ")"로 시작하는지 조건문을 만들어 놓으면 된다.
• why? : 앞에 조건문을 안걸어주면 ")"로 시작해도 반복문으로 들어와 일일이 검사 작업을 해줘야 해서 효율성이 떨어진다.
if(s[0] === ")") return false;
다른 사람 풀이 🔥
function solution(s){
let cum = 0
for (let paren of s) {
cum += paren === '('? 1: -1
if(cum < 0) {
return false
}
}
return cum === 0? true: false;
}
'• 프로그래머스 > Lv2' 카테고리의 다른 글
프로그래머스 Level 2 - 최댓값과 최솟값(Javascript) (0) | 2023.03.04 |
---|