Jieunny์˜ ๋ธ”๋กœ๊ทธ

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ ๋ณธ๋ฌธ

Study/Coding Test

[JS] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ด„ํ˜ธ ํšŒ์ „ํ•˜๊ธฐ

Jieunny 2023. 2. 22. 11:41

๐Ÿ“Œ  ๋ฌธ์ œ

๋‹ค์Œ ๊ทœ์น™์„ ์ง€ํ‚ค๋Š” ๋ฌธ์ž์—ด์„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

  • (), [], {} ๋Š” ๋ชจ๋‘ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ A๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด, (A), [A], {A} ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, [] ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ, ([]) ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ A, B๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ผ๋ฉด, AB ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, {} ์™€ ([]) ๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด๋ฏ€๋กœ, {}([]) ๋„ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.

๋Œ€๊ด„ํ˜ธ, ์ค‘๊ด„ํ˜ธ, ๊ทธ๋ฆฌ๊ณ  ์†Œ๊ด„ํ˜ธ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด s๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์ด s๋ฅผ ์™ผ์ชฝ์œผ๋กœ x (0 ≤ x < (s์˜ ๊ธธ์ด)) ์นธ๋งŒํผ ํšŒ์ „์‹œ์ผฐ์„ ๋•Œ s๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์ด ๋˜๊ฒŒ ํ•˜๋Š” x์˜ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ

  • s์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 1,000 ์ดํ•˜์ž…๋‹ˆ๋‹ค.

 

๐Ÿ’ก  ์•„์ด๋””์–ด

์‹œ๊ฐ„์„ ์ค„์ด๋ ค๊ณ  ๊ด„ํ˜ธ ๊ฐœ์ˆ˜๋ฅผ ์„ธ์„œ ์—ฌ๋Š”๊ฑฐ๋ฉด +1, ๋‹ซ๋Š”๊ฑฐ๋ฉด -1 ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ–ˆ๋Š”๋ฐ, ์ด ๋ฐฉ๋ฒ•์€ ๊ด„ํ˜ธ ์ข…๋ฅ˜๊ฐ€ ํ•˜๋‚˜ ์ผ ๋•Œ๋งŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค์‹œ ์Šคํƒ์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

โœ๏ธ  ํ’€์ด

function solution(s) {
  var answer = -1;
  let result = 0;
  let sArr = s.split('');

  if(count(sArr) === 1) result ++;
  let i = 1;
  while(i < sArr.length){
    if(count(moveLeft(sArr))===1){
      result++;
    }
    i++;
  }
  answer = result;
  return answer;
}

function moveLeft(sArr) {	// ๋ฐฐ์—ด ์™ผ์ชฝ์œผ๋กœ ํšŒ์ „์‹œํ‚ค๋Š” ํ•จ์ˆ˜
  let i = 0;
  while(i <= sArr.length){
    sArr.push(sArr.shift());
    // ๋งจ์•ž์— ์žˆ๋Š”๊ฑฐ ๋นผ์„œ ๋งจ ๋’ค์— ๋„ฃ์–ด์ฃผ๋Š” ๊ฑธ ๋ฐฐ์—ด ๊ธธ์ด๋งŒํผ ๋ฐ˜๋ณตํ•˜๋ฉด ์™ผ์ชฝ์œผ๋กœ ํ•œ์นธ ๋•ก๊ธด ๊ฒƒ ์ฒ˜๋Ÿผ ๋œ๋‹ค.
    i++;
  }
  return sArr;
}

function count(sArr) {	// ๊ด„ํ˜ธ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜
  let stk=[];
  for(let i=0; i<sArr.length; i++){
    stk.push(sArr[i]);
    if(stk.length >= 2){
      if((stk[stk.length-2] === '(' && stk[stk.length-1] ===')') || (stk[stk.length-2] === '{' && stk[stk.length-1] ==='}') || (stk[stk.length-2] === '[' && stk[stk.length-1] ===']')){
        stk.pop();
        stk.pop();
      }
    }
  }
  if(stk.length === 0) return 1;
  else return 0;
}