0384

개발

백준 v2

[백준] 1316번 - 문제 이름

문제 링크 : (url)

(문제 사진)

| 문제 탐색하기

1) 목표

:

2) 기능 명세서

(1)

:

| 고민이 되었던 부분

1)

:

| 처음 코드 & 개선이 필요한 점

JavaScript
function printResult(inputs) {
  // 1. 배열 분리
  const [n, ...words] = inputs;

  // 2. 각 문자 별 그룹 단어 체크 후 총 개수 반환
  return words.reduce((count, word) => count + checkGroupWord(word), 0);
}

// 특정 단어에 대한 그룹 단어인지 체크하는 함수
function checkGroupWord(word) {
  let isCheck = true; // 그룹단어 여부
  let beforeChar = ""; // 직전 문자
  let charSet = new Set(); // 등장한 문자를 담는 Set
  const wordCharArr = word.split(""); // 특정 단어를 문자로 분리한 배열

  // 1. 단어의 각 문자 별로 순회하면서 체크
  for (let i = 0; i < wordCharArr.length; i++) {
    // 2. 이전 문자와 현재 문자가 같은지 체크
    if (beforeChar === wordCharArr[i]) {
      continue;
    }

    // 3. 현재 문자가 이전에 등장했는지 체크
    if (!charSet.has(wordCharArr[i])) {
      // 3-1-1. 등장하지 않았으므로, 새로운 문자를 Set에 추가
      charSet.add(wordCharArr[i]);

      // 3-1-2. 현재 문자를 직전 문자로 할당
      beforeChar = wordCharArr[i];
    } else {
      // 3-2-1. 직전 문자와 현재 문자가 같지 않고, 현재 문자는 이전에 등장했기에 그룹단어로 미인정
      isCheck = false;
      break;
    }
  }
  return isCheck ? 1 : 0;
}

function main() {
  const fs = require("fs");
  const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");

  const [n, ...words] = input;
  const N = Number(n);

  const output = printResult([N, ...words]);
  console.log(output);
}

if (require.main === module) {
  main();
}

module.exports = {
  printResult,
};

1)

:

| 최종 코드

JavaScript
function printResult(inputs) {
  // 1. 배열 분리
  const [n, ...words] = inputs;

  // 2. 각 문자 별 그룹 단어 체크 후 총 개수 반환
  return words.reduce((count, word) => count + checkGroupWord(word), 0);
}

// 특정 단어에 대한 그룹 단어인지 체크하는 함수
function checkGroupWord(word) {
  const usedChars = new Set();
  let prevChar = "";

  for (const char of word) {
    if (char !== prevChar) {
      if (usedChars.has(char)) {
        return false;
      }
      usedChars.add(char);
      prevChar = char;
    }
  }
  return true;
}

function main() {
  const fs = require("fs");
  const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
  const output = printResult(input);
  console.log(output);
}

if (require.main === module) {
  main();
}

module.exports = {
  printResult,
};

| 느낀점

(느낀 점)

백준, 알고리즘, JavaScript, Node.js, 코딩테스트, 회고, 문제 번호, 문제 이름