[백준 단계별로 풀어보기] 7. 문자열 (feat. NodeJS)
11654번: 아스키 코드
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let inputValue;
const onInput = (value) => (inputValue = value);
const onClose = () => {
const result = [];
for (let i = 0; i < 26; i++) {
result[i] = inputValue.indexOf(String.fromCharCode(i + 97));
}
console.log(result.join(" "));
process.exit();
};
rl.on("line", onInput).on("close", onClose);
11654번: 아스키 코드
알파벳 소문자, 대문자, 숫자 0-9중 하나가 주어졌을 때, 주어진 글자의 아스키 코드값을 출력하는 프로그램을 작성하시오.
www.acmicpc.net
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let inputValue;
const onInput = (value) => (inputValue = value);
const onClose = () => {
console.log(inputValue.charCodeAt());
process.exit();
};
rl.on("line", onInput).on("close", onClose);
11720번: 숫자의 합
11720번: 숫자의 합
첫째 줄에 숫자의 개수 N (1 ≤ N ≤ 100)이 주어진다. 둘째 줄에 숫자 N개가 공백없이 주어진다.
www.acmicpc.net
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const array = [];
const onInput = (input) => array.push(input);
const onClose = () => {
const numbers = array[1].split("");
const total = numbers.reduce((pre, cur) => pre + Number(cur), 0);
console.log(total);
process.exit();
};
rl.on("line", onInput).on("close", onClose);
10809번: 알파벳 찾기
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
CASE 1
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let inputValue;
const onInput = (value) => (inputValue = value);
const onClose = () => {
const baseArray = [
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
];
const alphabetArray = inputValue.split("");
baseArray.map((value, index) => {
const foundIndex = alphabetArray.indexOf(value);
baseArray[index] = foundIndex;
});
console.log(baseArray.join(" "));
process.exit();
};
rl.on("line", onInput).on("close", onClose);
CASE 2
다른 분이 푸신거 참고해서 더 깔끔해서 변경했다.
아스키 코드를 사용해서 풀다니 메모메모✍️
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let inputValue;
const onInput = (value) => (inputValue = value);
const onClose = () => {
const result = [];
for (let i = 0; i < 26; i++) {
result[i] = inputValue.indexOf(String.fromCharCode(i + 97));
}
console.log(result.join(" "));
process.exit();
};
rl.on("line", onInput).on("close", onClose);
2675번: 문자열 반복
2675번: 문자열 반복
문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다
www.acmicpc.net
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const array = [];
const onInput = (input) => array.push(input);
const onClose = () => {
let result = "";
for (let i = 1; i <= array.length - 1; i++) {
const [count, strValue] = array[i].split(" ");
for (let x = 0; x < strValue.length; x++) {
result += strValue[x].repeat(count);
}
console.log(result);
result = "";
}
process.exit();
};
rl.on("line", onInput).on("close", onClose);
1157번: 단어 공부
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
CASE 1
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let inputValue;
const onInput = (value) => (inputValue = value.toLowerCase());
const onClose = () => {
const obj = {};
let answerArray = [];
let count = 0;
let searchNum = -1;
const charArray = inputValue.split("").filter((value, index) => inputValue.indexOf(value) === index);
for (const charValue of charArray) {
while (true) {
searchNum = inputValue.indexOf(charValue, searchNum + 1);
if (searchNum === -1) {
break;
}
count++;
}
obj[charValue] = count;
count = 0;
searchNum = -1;
}
let arr = Object.values(obj);
let max = Math.max(...arr);
for (const key in obj) {
const value = obj[key];
if (value === max) {
answerArray.push(key);
}
}
if (answerArray.length > 1) {
console.log("?");
} else {
console.log(answerArray[0].toUpperCase());
}
process.exit();
};
rl.on("line", onInput).on("close", onClose);
CASE 2
문자 관련된건 아스키코드로 푸는게 더 간편한 것 같다.
응용을 잘하자!!!!!!
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let inputValue;
const onInput = (value) => (inputValue = value.toLowerCase());
const onClose = () => {
let maxIndex = -1;
let resultArray = [];
const alphabetArray = new Array(26).fill(0);
for (let i = 0; i < inputValue.length; i++) {
alphabetArray[inputValue.charCodeAt(i) - 97]++;
}
const max = Math.max(...alphabetArray);
while (1) {
maxIndex = alphabetArray.indexOf(max, maxIndex + 1);
if (maxIndex === -1) {
break;
}
resultArray.push(maxIndex);
}
if (resultArray.length > 1) {
console.log("?");
} else {
console.log(String.fromCharCode((resultArray[0] + 97).toString()).toUpperCase());
}
process.exit();
};
rl.on("line", onInput).on("close", onClose);
1152번: 단어의 개수
1152번: 단어의 개수
첫 줄에 영어 대소문자와 띄어쓰기로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 띄어쓰기 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한
www.acmicpc.net
너무 쉬운 문제인데 왜 합격율을 23% 밖에 안되지? 라고 생각했다가 된통 망한 문제다.
함정이 숨어있는데 문자열이 공백뿐일수도 있다.
따라서, 값이 공백일 때 예외처리를 해줘야한다.
문제를 제대로 읽고 예외처리에 대해서도 생각하자!
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let inputValue;
const onInput = (value) => (inputValue = value.trimStart().trimEnd());
const onClose = () => {
const result = inputValue.split(" ");
if (!result[0]) {
console.log(0);
} else {
console.log(result.length);
}
process.exit();
};
rl.on("line", onInput).on("close", onClose);
2908번: 상수
2908번: 상수
상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두
www.acmicpc.net
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let inputValue;
const onInput = (value) => (inputValue = value);
const reverse = (string) => {
return Number([...string].reverse().join(""));
};
const onClose = () => {
const array = inputValue.split(" ");
const max = Math.max(reverse(array[0]), reverse(array[1]));
console.log(max);
process.exit();
};
rl.on("line", onInput).on("close", onClose);
5622번: 다이얼
5622번: 다이얼
첫째 줄에 알파벳 대문자로 이루어진 단어가 주어진다. 단어는 2글자~15글자로 이루어져 있다.
www.acmicpc.net
CASE 1
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let inputValue;
const onInput = (value) => (inputValue = value);
const onClose = () => {
const phone = [
["A", "B", "C"],
["D", "E", "F"],
["G", "H", "I"],
["J", "K", "L"],
["M", "N", "O"],
["P", "Q", "R", "S"],
["T", "U", "V"],
["W", "X", "Y", "Z"],
];
let answer = [];
for (const value of inputValue) {
for (const index in phone) {
const number = phone[index].indexOf(value);
if (number > -1) {
answer.push(index);
}
}
}
const sum = answer.reduce((pre, cur) => pre + (Number(cur) + 3), 0);
console.log(sum);
process.exit();
};
rl.on("line", onInput).on("close", onClose);
CASE 2
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let inputValue;
const onInput = (value) => (inputValue = value);
const onClose = () => {
const result = inputValue.split("").reduce((pre, cur) => {
const ascii = cur.charCodeAt();
if (ascii >= 65 && ascii <= 67) {
return pre + 3;
} else if (ascii >= 68 && ascii <= 70) {
return pre + 4;
} else if (ascii >= 71 && ascii <= 73) {
return pre + 5;
} else if (ascii >= 74 && ascii <= 76) {
return pre + 6;
} else if (ascii >= 77 && ascii <= 79) {
return pre + 7;
} else if (ascii >= 80 && ascii <= 83) {
return pre + 8;
} else if (ascii >= 84 && ascii <= 86) {
return pre + 9;
} else if (ascii >= 87 && ascii <= 90) {
return pre + 10;
}
}, 0);
console.log(result);
process.exit();
};
rl.on("line", onInput).on("close", onClose);
2941번: 크로아티아 알파벳
2941번: 크로아티아 알파벳
예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z=
www.acmicpc.net
CASE 1
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let inputValue;
const onInput = (value) => (inputValue = value);
const onClose = () => {
const croatias = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="];
let count = 0;
for (const croatia of croatias) {
while (1) {
const index = inputValue.indexOf(croatia);
if (index === -1) {
break;
}
count++;
inputValue = inputValue.slice(0, index) + " " + inputValue.slice(index + croatia.length);
}
}
count += inputValue.replace(/([^a-z])/g, "").length;
console.log(count);
process.exit();
};
rl.on("line", onInput).on("close", onClose);
CASE 2
정규표현식을 잘 활용하면 이렇게 간단하게 완성할 수 있다.
정규표현식 공부해야지..🤦♀️
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let inputValue;
const onInput = (value) => (inputValue = value);
const onClose = () => {
const result = inputValue.replace(/c\=|c\-|dz\=|d\-|lj|nj|s\=|z\=/g, " ");
console.log(result.length);
process.exit();
};
rl.on("line", onInput).on("close", onClose);
🚨 1316번: 그룹 단어 체커
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
이 문제는 처음으로 혼자 못 푼 문제.
나중에 다시 풀어보기.
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const array = [];
const onInput = (input) => array.push(input);
const onClose = () => {
let countGroupWord = 0;
for (let i = 1; i < array.length; i++) {
const word = array[i];
const firstLetters = [];
let isGroupWord = true;
for (const letter of word) {
if (firstLetters.indexOf(letter) === -1) {
firstLetters.push(letter);
} else {
if (firstLetters.indexOf(letter) !== firstLetters.length - 1) {
isGroupWord = false;
break;
}
}
}
if (isGroupWord) {
countGroupWord++;
}
}
console.log(countGroupWord);
process.exit();
};
rl.on("line", onInput).on("close", onClose);