[boj] 2941. 크로아티아 알파벳 (node.js)

요약

  • 크로아티아 알파벳 단어표가 주어진다. 표에 없는 알파벳은 한 알파벳이 곧 한 단어다. 주어진 입력값이 몇 개의 크로아티아 알파벳으로 이루어졌는지 그 개수를 반환하라.

풀이

내 풀이

const fs = require("fs");
const filePath = process.platform === "linux" ? "dev/stdin" : "input.txt";
const stdin = fs.readFileSync(filePath).toString().split("\n");

let cnt = 0;
const input = () => {
  return stdin[cnt++];
};

const alphabets = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="];

const solution = () => {
  let text = input();
  let count = 0;
  alphabets.forEach(x => {
    while (true) {
      if (text.includes(x)) {
        text = text.replace(x, ' ');
        count++;
      } else {
        break;
      }
    }
  })
  text = text.trim().replace(/(\s*)/g, "");
  console.log(count + text.length);
};

solution();
  • 주어진 알파벳을 표에 넣어 두고, forEach()로 하나씩 받아왔다. 단어가 입력값 내에 존재하면, " "으로 replace했다.
  • 배열에 있는 알파벳의 수는 count하고 그렇지 않은 값은 text에 남은 길이를 처리하여 모두 더하는 구조로 값을 반환했다.

어려웠던 점

  1. 처음엔 replace를 ""으로 해서 공백을 만들지 않았더니 앞뒤 문자끼리 붙어 새로운 단어가 생성되기도 한다. 예외 처리에 항상 유의하자.
  2. 존재하는 알파벳은 count로 센 후, 존재하지 않는 알파벳은 text.length만으로 가져오면 될 줄 알았는데 text에는 공백이 많았다.

그래서

다양한 케이스에 대한 공백 제거를 위해 정규식을 찾아봤다. trim() 이랑 replace(" ", "")만으로 여러 개의 연속된 공백을 처리하려면 코드가 과하게 길고 복잡해졌을 것! 정규식을 틈틈이 알아둬야겠다.

주절주절

여러 번 다양한 접근방법을 써서 풀려고 고뇌했다 T-T 초반에 포기했던 간결한 접근법이 그 열쇠였다.

역시 안 되면 다시 생각해보기

좋은 웹페이지 즐겨찾기