코딩 테스트/프로그래머스 level2

괄호 회전하기

fullfish 2022. 9. 10. 23:49

처음 코드

function solution(s) {
  let result = 0;
  for (let i = 0; i < s.length; i++) {
    if (check(s)) result++;
    s = s.slice(s.length - 1) + s.slice(0, s.length - 1);
  }
  return result;
}
function check(s) {
  let a = 0; // []
  let b = 0; // {}
  let c = 0; // ()
  for (let i = 0; i < s.length; i++) {
    if (s[i] === "[") a++;
    else if (s[i] === "]") a--;
    else if (s[i] === "{") b++;
    else if (s[i] === "}") b--;
    else if (s[i] === "(") c++;
    else c--;

    if (a < 0 || b < 0 || c < 0) return false;
  }
  return a === 0 && b === 0 && c === 0 ? true : false;
}

예전에 괄호 1종류만을 쓰는 비슷한 문제를 풀어봐서

이번에도 같은 방법으로

괄호 여는것이 나오면 ++

괄호 닫는것이 나오면 --

음수로 떨어지는 순간 false, 마지막에 0이면 true로 했는데

테스트 케이스 1개만 통과가 안된다

괄호가 3종류다 보니까 '( [ ) ]'같은 경우 옳지못한 괄호이지만

내가 만든 함수에서는 true가 출력되서 그렇다

그래서 stack을 이용해서 짝이 맞는 괄호끼리 없애고 0이여야지 true로 다시 만들었다

코드

function solution(s) {
  let result = 0;
  for (let i = 0; i < s.length; i++) {
    console.log("object");
    if (check(s)) result++;
    s = s.slice(s.length - 1) + s.slice(0, s.length - 1);
  }
  return result;
}
function check(s) {
  let stack = [];
  for (let i = 0; i < s.length; i++) {
    if (stack[stack.length - 1] === "[" && s[i] === "]") stack.pop();
    else if (stack[stack.length - 1] === "(" && s[i] === ")") stack.pop();
    else if (stack[stack.length - 1] === "{" && s[i] === "}") stack.pop();
    else stack.push(s[i]);
  }
  return stack.length ? false : true;
}

'코딩 테스트 > 프로그래머스 level2' 카테고리의 다른 글

위장  (0) 2022.09.11
튜플  (0) 2022.09.11
H-Index  (0) 2022.09.10
점프와 순간 이동  (0) 2022.09.10
[1차] 캐시  (0) 2022.09.10