백준 알고리즘 기초 강의에 명시된 문제를 풀이한 포스트입니다
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = "";
rl.on("line", (line) => {
input = line;
rl.close();
}).on("close", () => {
/**
* 중위 표기식에서 후위 표기식 변환 방법
* 1. 피연산자는 바로 출력
* 2. 연산자는 스택의 상태에 따라 출력
* 2.1 스택이 비었다면 스택에 넣기
* 2.2 연산자 우선순위가 낮은 연산자 or 닫는 괄호를 만날 때까지 "pop()" 실행 후 스택에 넣기
* 2.3 닫는 괄호라면 여는 괄호가 나올 때까지 "pop()" 실행
* 3. 수식의 끝까지 왔다면 스택의 연산자들을 모두 꺼냄
*/
const stack = [];
let answer = "";
input.split("").forEach((v) => {
// 연산자라면
if (v.match(/[\(\)\+\*\-\/]/)) {
// 2. 연산자는 스택의 상태에 따라 출력
switch (v) {
case "(":
stack.push(v);
break;
case ")":
// 2.3 닫는 괄호라면 여는 괄호가 나올 때까지 "pop()" 실행
while (stack.length && stack[stack.length - 1] !== "(") {
answer += stack.pop();
}
stack.pop();
break;
case "+":
case "-":
// 2.2 연산자 우선순위가 낮은 연산자를 만날 때까지 "pop()" 실행 후 스택에 넣기 ( "+", "-"는 우선순위가 제일 낮아서 비교할 필요 없이 닫는 괄호가 나오는지만 확인하면 됨 )
while (stack.length && stack[stack.length - 1] !== "(") {
answer += stack.pop();
}
stack.push(v);
break;
case "*":
case "/":
// 2.2 연산자 우선순위가 낮은 연산자를 만날 때까지 "pop()" 실행 후 스택에 넣기 ( "*", "/"만 비교하므로 닫는 괄호를 생각해 줄 필요 없음 )
while (
stack.length &&
(stack[stack.length - 1] === "*" || stack[stack.length - 1] === "/")
) {
answer += stack.pop();
}
stack.push(v);
break;
}
}
// 피연산자라면
else {
// 1. 피연산자는 바로 출력
answer += v;
}
});
// 3. 수식의 끝까지 왔다면 스택의 연산자들을 모두 꺼냄
while (stack.length) answer += stack.pop();
console.log(answer);
process.exit();
});
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
rl.on("line", (line) => {
input.push(line);
if (+input[0] + 2 === input.length) rl.close();
}).on("close", () => {
/**
* 후위 표현식 계산법
* 1. 피연산자는 스택에 넣는다.
* 2. 연산자가 나올 경우 스택에서 피연산자 2개를 꺼낸 후 계산한 뒤 다시 넣는다. ( 단, 연산 순서는 "나중" "연산자" "먼저" )
* 3. 모든 연산이 끝난 후 스택에 담겨있는 피연산자가 연산의 결과다.
*/
const [, expression, ...temp] = input;
const values = temp.map((v) => +v);
const stack = [];
let firstValue = null;
let lastValue = null;
expression.split("").forEach((v) => {
// 연산자일 경우
if (v.match(/[\+\-\*\/]/)) {
lastValue = stack.pop();
firstValue = stack.pop();
switch (v) {
case "+":
stack.push(firstValue + lastValue);
break;
case "-":
stack.push(firstValue - lastValue);
break;
case "*":
stack.push(firstValue * lastValue);
break;
case "/":
stack.push(firstValue / lastValue);
break;
}
}
// 피연산자일 경우
else {
stack.push(values[v.charCodeAt() - 65]);
}
});
console.log(stack[0].toFixed(2));
process.exit();
});
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = null;
rl.on("line", (line) => {
input = line;
rl.close();
}).on("close", () => {
const alphabet = Array(26).fill(0);
const word = input;
word.split("").forEach((v) => (alphabet[v.charCodeAt() - 97] += 1));
console.log(alphabet.join(" "));
process.exit();
});
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = null;
rl.on("line", (line) => {
input = line;
rl.close();
}).on("close", () => {
const alphabet = Array(26).fill(-1);
const word = input;
word.split("").forEach((v, i) => {
if (alphabet[v.charCodeAt() - 97] !== -1) return;
alphabet[v.charCodeAt() - 97] = i;
});
console.log(alphabet.join(" "));
process.exit();
});
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const input = [];
let temp = null;
let answer = "";
const table = {
upper: 0,
lower: 0,
number: 0,
space: 0,
};
rl.on("line", (line) => {
input.push(line);
// rl.close();
}).on("close", () => {
// 전체 탐색
input.forEach((str, i) => {
// 문장 단위로 탐색
str.split("").forEach((v) => {
temp = v.charCodeAt();
if (temp >= 97 && temp <= 122) table.upper++;
if (temp >= 65 && temp <= 90) table.lower++;
if (temp >= 48 && temp <= 57) table.number++;
if (temp === 32) table.space++;
});
// 문장 탐색 후 정답 작성
answer += Object.values(table).join(" ");
// 마지막 아니면 줄바꿈
if (i !== input.length - 1) answer += "\n";
// 초기화
Object.keys(table).forEach((key) => (table[key] = 0));
});
console.log(answer);
process.exit();
});
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const input = [];
rl.on("line", (line) => {
input.push(line);
rl.close();
}).on("close", () => {
const [word] = input;
console.log(word.length);
process.exit();
});