A.P - 올바른 괄호 검사(프로그래머스, L2)

EBinY·2022년 10월 28일
0

AP - Algorithm Problem

목록 보기
52/55
  1. 문제
  • 스택/큐를 활용하는 문제
  • 소괄호로 이루어진 문자열을 받아 여닫힘이 정상인지를 검사
  • 제한은 100,000개 이하, true와 false를 리턴하라
  1. 수도코드
// 괄호는 먼저 열려야 하고, 열린만큼 닫혀야 함
// 입력된 문자열을 반복문으로 분리하자
// 열림이 나오면 다른 문자열에 저장해두었다가
// 닫힘이 나올때 하나씩 꺼내어 열+닫 짝을 맞추어 줄여나가고
// 중간에 열림이 모자르면 바로 false를 리턴하고
// 문자열이 끝날때까지 잘 맞춰지면 true를 리턴하자
  1. 시도
// 정확도와 효율성을 따로 검사함
// 최초의 시도는 정확도는 100점인데 효율성이 0점이라 탈락
// 문제점이 무엇인지 고민하다가 if에서의 효율을 올리려고 코드를 고민함
// else처리했던 부분을 바로 처리되도록 수정하였더니 효율도 100점
function solution(s){
    // 열림을 카운팅할 카운터
    let cnt = 0;
    // 반복문으로 입력된 문자열 s를 처리
    for (let i = 0; i < s.length; i++) {
        // 현재 문자열이 열림인지 닫힘인지를 구별
        // 열림일때는 카운터++
        if (s[i] === '(') {cnt++;}
        // 닫힘일때는 카운터를 체크
        if (s[i] === ')') {
            // 0이면 잘못 닫힌 괄호이므로 바로 false 리턴
            if (cnt === 0) {
                return false;
            }
            cnt--;
        }
    }
    // 반복문이 끝나고 카운터가 0이면 true, 아니라면 false
    if (cnt === 0) {
        return true;
    }
    return false;
}
  1. 레퍼런스
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;
}
  1. 레퍼런스 공부 및 주석
// 결론적으로 봤을때는 내 코드와 거의 유사한 구조
// 삼항식을 사용하여 코드가 좀 더 간결해지고 가독성이 좋아졌음 
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;
}

0개의 댓글

관련 채용 정보