본문 바로가기
코테연습

164. 괄호 회전하기 Javascript

by hxunz 2022. 9. 21.

https://school.programmers.co.kr/learn/courses/30/lessons/76502

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. 문제에 대한 이해

  • 우리가 풀어야 할 문제는 무엇인가?
     - 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return
  • 주어진 자료는 무엇인가?
     - 대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s
  • 조건은 무엇인가? 
     - s의 길이는 1 이상 1,000 이하

2. 계획

  1. 괄호들을 맵핑해둔다. 
  2. 문자열을 쪼개고 순회하면서 스택에 넣는다.
  3. 스택에 있는 괄호가 맵핑이 된다면 pop한다. 맵핑이 안된다면 false 맵핑이 다 되었다면 true
  4. true인 결과들만 세어준다. 
  5. 한번 순회했으면 첫번째 문자열을 자르고 맨 뒤에 붙인다.                 

3. 실행

  • 풀이 계획을 실행하고, 각 단계가 올바른지 점검하라.
const solution = (s) => {
  const strArr = s.split('');
  let result = 0;

  for (let i = 0; i < s.length; i++) {
    if (compare(strArr)) {
      result += 1;
    }
    strArr.push(strArr.shift());
  }
  return result;
}

const compare = (strArr) => {
  const bracket = { ')': '(', '}': '{', ']': '[' };
  const stack = [];
  for (let i = 0; i < strArr.length; i++) {
    const str = strArr[i]
    if (bracket[str] === undefined) {
      stack.push(str)
    } else {
      if (stack[stack.length - 1] !== bracket[str]) {
        return false
      }
      stack.pop()
    }
  }
  if (stack.length) {
    return false
  }
  return true
}


test('', () => {
  expect(solution(')')).toEqual(0);
  expect(solution('}}}')).toEqual(0);
  expect(solution('[)(]')).toEqual(0);
  expect(solution('()')).toEqual(1);
  expect(solution('(()')).toEqual(0);
  expect(solution(')(')).toEqual(1);
  expect(solution('([)')).toEqual(0);
  expect(solution('([])')).toEqual(1);
  expect(solution('[]')).toEqual(1);
  expect(solution("{}[]")).toEqual(2);
  expect(solution("[](){}")).toEqual(3);
});

 

'코테연습' 카테고리의 다른 글

166. 124 나라의 숫자 Javascript  (0) 2022.09.22
165. 튜플 Javascript  (1) 2022.09.21
163. H-Index Javascript  (0) 2022.09.20
162. 행렬의 곱셈 Javascript  (0) 2022.09.19
161. 파괴되지 않은 건물 Javascript  (0) 2022.09.19

댓글