[JS][백준]19948_음유시인 영재
Algorithm/BaeKJoon

[JS][백준]19948_음유시인 영재

문제 번호

 

19948번: 음유시인 영재

감수성이 뛰어난 음유시인 영재는 일상생활 중에 번뜩 시상이 떠오르곤 한다. 하지만 기억력이 좋지 못한 영재는 시상이 떠오르면 그 순간 컴퓨터로 기록해야만 안 까먹는다! 시는 대문자, 소

www.acmicpc.net

 

 

 

알고리즘 분류

 

문제 풀이

 정답률이 낮은 구현문제이다. 

질문게시판을 참고해보니 문제를 푸시는 분들이 시의 내용만 생각하고 시의 제목은 누를 수 있는 횟수에서 차감하지 않는 실수를 많이 해서 정답률이 낮은것 같다고 한다.

 문제에서 공백이 여러개 연속으로 이어지는 경우도 주어지는 지는 모르겠으나 그럴 수 도 있다고 판단되어서 정규식을 이용하여 split 함으로써 해당경우도 처리할 수 있도록 하였다. 

const pome = input[0].trim().split(/\s{1,}/);

 

그다지 어렵지 않은 구현문제였다. (나도 처음에 제목은 검사 안해서 틀렸다.)

function sol(pome, spaceBar, alpha) {
  let title = '';
  let content = ''
  for (let i = 0; i < pome.length; i++) {
    title += pome[i].toUpperCase()[0];
    content += pome[i];
  }

  spaceBar -= title.length - 1;
  if (spaceBar < 0)
    return -1;

  // 시의 내용 검사.
  let past = content[0];
  for (let i = 0; i < content.length; i++) {
    if (i !== 0 && content[i] === past)
      continue;
    else {
      // 대문자
      if (content.charCodeAt(i) >= 65 && content.charCodeAt(i) <= 90)
        alpha[content.charCodeAt(i) - 65]--;
      // 소문자
      else if (content.charCodeAt(i) >= 97 && content.charCodeAt(i) <= 122)
        alpha[content.charCodeAt(i) - 97]--;
    }
    past = content[i];
  }

  // 시의 제목검사.
  past = title[0];
  for (let i = 0; i < title.length; i++) {
    if (i !== 0 && title[i] === past)
      continue;
    else {
      // 대문자
      if (title.charCodeAt(i) >= 65 && title.charCodeAt(i) <= 90)
        alpha[title.charCodeAt(i) - 65]--;
      // 소문자
      else if (title.charCodeAt(i) >= 97 && title.charCodeAt(i) <= 122)
        alpha[title.charCodeAt(i) - 97]--;
    }
    past = content[i];
  }


  for (let i = 0; i < alpha.length; i++) {
    if (alpha[i] < 0)
      return -1;
  }

  return title;
}


function insert() {
  const input = require('fs').readFileSync('음유시인 영재/input.txt').toString().trim().split('\n');
  const pome = input[0].trim().split(/\s{1,}/);
  const spaceBar = +input[1];
  const alpha = input[2].split(' ').map(Number);

  console.log(sol(pome, spaceBar, alpha));
}

insert();

특이사항