πŸ”‘ μ•Œκ³ λ¦¬μ¦˜/λ°±μ€€ JS

[λ°±μ€€] JS/ 4949 κ· ν˜•μž‘νžŒ 세상

Tamii 2021. 9. 29. 09:52
λ°˜μ‘ν˜•

 

❖.μ‹€μ œ λ°±μ€€ ν’€μ΄μ—μ„œλŠ” fs.readFileSync('./test') -> fs.readFileSync('./dev/stdin') μ΄λ ‡κ²Œ κ³ μ³μ„œ μƒκ°ν•΄μ£Όμ„Έμš”

 

 

처음 ν’€μ΄λŠ”  μ™„μ „νžˆ 잘λͺ» μƒκ°ν–ˆλ‹€.

λ‘κ°œμ˜ 개수만 맞으면 λœλ‹€κ³  μƒκ°ν•΄μ„œ μ •κ·œν‘œν˜„μ‹μœΌλ‘œ μ •μ„±μŠ€λŸ½κ²Œ μ΄μƒν•œ μ½”λ“œλ₯Ό 써내렀갔닀..^^

 

처음 풀이 ( λ°©ν–₯ μ™„μ „ 잘λͺ» )

const fs = require('fs');

let input = (fs.readFileSync('./test') + '').toString().trim().split('.');

input.pop();
input.pop();

console.log(input);

const regL = /\[/g;
const regR = /\[/g;
const regl = /\(/g;
const regr = /\)/g;

const ans = input.map((i) => {
  const regLCnt = i.match(regL) ? i.match(regL).length : 0;
  const regRCnt = i.match(regR) ? i.match(regR).length : 0;
  const reglCnt = i.match(regl) ? i.match(regl).length : 0;
  const regrCnt = i.match(regr) ? i.match(regr).length : 0;
  console.log(i, 'i', regLCnt, regRCnt, reglCnt, regrCnt);
  if (regLCnt === regRCnt && reglCnt === regrCnt) return 'yes';
  else return 'no';
});

console.log(ans);

 

κ·Έ λ‹€μŒμ—μ•Ό λ“  생각은

 μŠ€νƒμ„ λ§Œλ“€μ–΄μ„œ λ„£λ‹€ 뺏닀 ν•΄μ€˜μ•Ό ν•˜λŠ”κ΅¬λ‚˜ λΌλŠ”κ±Έ λŠλ‚Œ

 

 

 

 

내풀이 2 (μ˜€λ‹΅)

const fs = require('fs');

let input = (fs.readFileSync('./test') + '').toString().trim().split('.');

input.pop();
input.pop();


const ans = input.map((sentence) => {
  const bracketStack = [];
  sentence.split('').forEach((word) => {
    if (word === '(' || word === '[') {
      bracketStack.push(word);
    } else if (word === ')') {
      if (bracketStack[bracketStack.length - 1] !== '(') return 'no';
      else bracketStack.pop();
    } else if (word === ']') {
      if (bracketStack[bracketStack.length - 1] !== '[') return 'no';
      else bracketStack.pop();
    }
  });

  if (bracketStack.length !== 0) return 'no';
  return 'yes';
});
ans.forEach((a) => console.log(a));

μ–΄λ–»κ²Œλ“  닡을 λ§Œλ“€κΈ° μœ„ν•œ λ°œμ•…..?

문제 μ˜ˆμ‹œλŠ” λ§žμ•˜λ‹€κ³  μƒκ°ν–ˆλŠ”λ° 

ν—ˆμˆ ν•œ μ‘°κ±΄λ¬Έμ—μ„œ κ±Έλ Έλ‹€κ³  νŒλ‹¨ν–ˆκ³  ν”ŒλŸ¬μŠ€ μ‹œκ°„μ΄ˆκ³Όλ„ μ˜ˆμƒν•˜κ³ μžˆμ—ˆλ‹€.

 

 

 

 

λ‚΄ 풀이3(μ •λ‹΅)

const fs = require('fs');

let input = (fs.readFileSync('./test') + '').toString().trim().split('\n');
const open = ['(', '['];
const close = [')', ']'];
let bracketStack;
const ans = [];

input.pop();
input.forEach((sentence) => {
  let isBool = false;
  bracketStack = [];

  for (let i = 0; i < sentence.length; i++) {
    if (open.includes(sentence[i])) bracketStack.push(sentence[i]);
    else if (close.includes(sentence[i])) {
      if (bracketStack.pop() !== open[close.indexOf(sentence[i])]) {
        ans.push('no');
        isBool = true;
        break;
      }
    }
  }
  if (!isBool) {
    if (bracketStack.length === 0) ans.push('yes');
    else ans.push('no');
  }
});

console.log(ans.join('\n'));

λ‚˜μ˜¬λ•Œλ§ˆλ‹€ 쑰건문을 톡해 ν™•μΈν•˜λŠ” 것이 μ•„λ‹ˆλΌ.

 

1. 각 λ¬Έμžμ—΄μ΄ open인지 close인지 확인

2. close라면 λ°©κΈˆλ‚˜μ˜¨ λ¬Έμžμ—΄μ΄ ')' 인지 ']'인지 확인 (openκ³Ό close의 μΈλ±μŠ€κ°€ κ°™μŒμ„ 이용)

3. 2번이 틀릴 경우 isBoolκ°’μœΌλ‘œ λ„˜κ²¨  bracket이 λΉ„μ–΄μžˆλŠ”μ§€μ˜ μ—¬λΆ€λ‘œ λ‹΅ 확인

 

4. λ§ˆμ§€λ§‰μœΌλ‘œ for문으둜 console.log ν•˜μ§€μ•Šκ³  join ( 이거 자꾸 까먹음)

 

 

---

 

 

πŸ₯³ 정말 ..... λ―Έλ¬˜ν•˜κ²Œ 자꾸 닡이 ν‹€λ¦°λ‹€. 그리고 μ˜€λŠ˜λ„ μƒˆλ‘œμš΄ 효울적인 ν‘œν˜„λ“€μ„ λ°°μ› λ”°.