문제 번호
알고리즘 분류
문제 풀이
정답률이 낮은 구현문제이다.
질문게시판을 참고해보니 문제를 푸시는 분들이 시의 내용만 생각하고 시의 제목은 누를 수 있는 횟수에서 차감하지 않는 실수를 많이 해서 정답률이 낮은것 같다고 한다.
문제에서 공백이 여러개 연속으로 이어지는 경우도 주어지는 지는 모르겠으나 그럴 수 도 있다고 판단되어서 정규식을 이용하여 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();
특이사항
'Algorithm > BaeKJoon' 카테고리의 다른 글
[JS][백준]1939_중량제한 (0) | 2021.10.25 |
---|---|
[JS][백준]2239_스도쿠 (0) | 2021.10.15 |
[JS/C++][백준]16401_과자 나눠주기 (0) | 2021.10.15 |
[JS/C++][백준]17352_여러분의 다리가 되어 드리겠습니다! (0) | 2021.09.29 |
[JS/C++][백준]19951_태상이의 훈련소 생활 (0) | 2021.09.27 |