본문 바로가기
일반 학습/코딩 테스트

[프로그래머스] 괄호 회전하기

by StelthPark 2022. 3. 22.

처리조건

풀이

맨 처음 들어오는 문자열 s는 일단 } , ) , ] 로 시작한다면 올바른 괄호 문자열인지 계산할 가치가 없다. 무조건 올바르지 않기때문이다 해당 조건에 만족하지 않는 문자열 s만 올바른 문자열인지 체크하는 함수를 만들어서 검사후 true라면 count를 올리게 될 것이고 문자열은 회전을 하기 때문에 문자열 길이만큼 for문을 돌려 split을 한 뒤 배열로 하나하나 문자열을 나누고 맨 앞자리를 짤라 맨 뒤에 push하여 다시 join하여 문자열로 만든 뒤 반복하게 된다.

 

checkString이라는 함수를 만들어 문자열을 받고 올바른 괄호 문자열 인지 검사한다.

while문을 돌려 i와 i+1이 서로 괄호로 닫겨 있는 모양이라면 해당 부분을 splice로 잘라내고 다시 남은 괄호들을 붙여서 문자열로 만든 뒤 break하여 반복적으로 올바른 괄호들을 제거해나간다.  for문에서 만약 한번도 삭제할 괄호가 없다면내부에 길이는 1이상인 상태이므로 false를 리턴하게하며 그 이외에는 길이가 0이 될 때 까지 제거됐으므로 true를 리턴한다. 

 

function solution(s) {
  let count = 0;

  for (let i = 0; i < s.length; i++) {
    if (s[0] !== "}" && s[0] !== ")" && s[0] !== "]" && checkString(s)) count++;

    s = s.split("");
    s.push(s.shift());
    s = s.join("");
  }
  return count;
}

function checkString(s) {
  let answer = true;
  while (true) {
    if (s.length <= 0) break;
    let checkCount = 0;
    for (let i = 0; i < s.length; i++) {
      if ((s[i] === "{" && s[i + 1] === "}") || (s[i] === "[" && s[i + 1] === "]") || (s[i] === "(" && s[i + 1] === ")")) {
        s = s.split("");
        s.splice(i, 2);
        s = s.join("");
        checkCount++;
        break;
      }
    }
    if (checkCount === 0) {
      answer = false;
      break;
    }
  }
  return answer;
}

 

 

 

댓글