[노드JS/알고리즘] 백준 - 3568번 iSharp
728x90

[문제]

 

3568번: iSharp

입력으로 주어진 변수 선언문을 문제의 조건에 맞게 변형한 뒤, 한 줄에 하나씩 출력한다. 변수형과 변수명 사이에는 공백이 하나 있어야 한다. 출력은 입력으로 주어진 변수 선언문에서 변수가

www.acmicpc.net

[코드 & 풀이]

// common은 기본 변수형, input은 변수 선언들
let [common, ...input] = require("fs")
  .readFileSync(process.platform === "linux" ? "/dev/stdin" : "input.txt")
  .toString()
  .trim()
  .split(" ");

input = input.map((v) => v.replace(",", "")); // 쉼표를 없애줌
input[input.length - 1] = input[input.length - 1].replace(";", ""); // 마지막에 오는 세미콜론을 없애줌

const format = /[a-zA-Z]/;
const alphabet = [];
for (let i = 0; i < input.length; i++) {
  const tmp = [];
  input[i].split("").map((char) => {
    // 한 글자씩 순회하면서 알파벳일 경우(format 정규식에 match가 되는 경우) tmp에 push하고,
    // replace를 이용하여 input에서 없애준다.
    // 예시) acs[][]&*&*일 경우 -> tmp: ['a','c','s'], input[i] = [][]&*&*
    if (char.match(format)) {
      tmp.push(char);
      input[i] = input[i].replace(char, "");
    }
  });
  // push된 알파벳을 join을 이용하여 단어로 만들어서 alphabet 배열에 Push
  // 예시) ['a','c','s'] => 'acs' => alphabet : ['acs']
  alphabet.push(tmp.join(""));

  // 순서를 뒤집어서 왼편에 붙여야하므로 reverse를 함
  // 주의) []를 reverse하면 ][가 되므로, ][는 다시 []로 바꾸어준다.
  input[i] = input[i].split("").reverse().join("").replace(/\]\[/g, "[]");
}

// 기본 변수형인 common, [],&,*가 있는 input[i] 그리고 변수명이 들어있는 alphabet[i]를 합쳐서
// result에 push한 후, \n로 join하여 출력한다.
const result = [];
for (let i = 0; i < input.length; i++) {
  result.push(`${common}${input[i]} ${alphabet[i]};`);
}

console.log(result.join("\n"));

 

반례를 생각하지 않고 제출했다가 틀렸습니다를 여러 번 마주한 문제..

입력받은 문자열을 생각하지 않고 reverse 했다가 []가 ][로 출력되었다.

그래서 다시 replace를 이용하여 []로 바꾸어주었다.

320x100