백준 알고리즘 기초 강의에 명시된 문제를 풀이한 포스트입니다
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 regex = /(<[\w\s]+>)/g;
// "< ... >"을 기준으로 분리
const temp = input.join("").split(regex);
const answer = temp
.map((v) => {
// "< ... >"이면 무시
if (v.includes("<") || v.includes(">")) return v;
// 그게 아니라면 순서 뒤집기
return v
.split(" ")
.map((w) => w.split("").reverse().join(""))
.join(" ");
})
.join("");
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 = line;
rl.close();
}).on("close", () => {
/**
* 막대기 => (*)
* 레이저 => ()
* 레이저가 생성될 경우 현재 막대의 개수만큼 조각이 늘어난다.
* 막대기가 끝일경우 조각 + 1이 된다.
*/
const temp = input.split("");
const sticks = [];
let answer = 0;
temp.forEach((v, i, array) => {
// 레이저인지 막대기인지 불분명함, 일단 막대기에 넣고 이후에 종류에 맞게 처리
if (v === "(") sticks.push(v);
else {
// 레이저
if (array[i - 1] === "(") {
sticks.pop();
answer += sticks.length;
}
// 막대기 끝
else {
sticks.pop();
answer++;
}
}
});
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);
if (input.length >= 2 && input[1].split(" ").length === +input[0]) rl.close();
}).on("close", () => {
// 입력 받은 숫자의 역순으로 확인 ( 효율성을 위해서 )
const target = input[1]
.split(" ")
.map((v) => +v)
.reverse();
const stack = [];
const answer = [];
// 역순으로 확인함을 인지
target.forEach((v, i) => {
// 제일 마지막 숫자는 오큰수가 존재할 수 없기 때문에 항상 -1
if (i === 0) answer.push(-1);
else {
// 스택에서 현재 숫자보다 작은 숫자 모두 제외 ( 현재 숫자보다 작으면서 더 우측에 있는 숫자는 오큰수가 될 수 없음 )
// 동일한 숫자도 제외해야 함
while (v >= stack[stack.length - 1]) stack.pop();
// 스택이 모두 비었다면 오큰수가 존재하지 않기 때문에 -1
if (stack.length === 0) answer.push(-1);
// 스택에 숫자가 존재한다면 최상위에 존재하는 숫자가 오큰수
else answer.push(stack[stack.length - 1]);
}
// 현재 숫자를 스택에 넣어주기
stack.push(v);
});
console.log(answer.reverse().join(" "));
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);
if (input.length >= 2 && input[1].split(" ").length === +input[0]) rl.close();
}).on("close", () => {
// 입력 받은 숫자의 역순으로 확인 ( 효율성을 위해서 )
const target = input[1]
.split(" ")
.map((v) => +v)
.reverse();
const stack = [];
const answer = [];
// 오큰수와 같은 원리지만 비교를 위한 테이블 생성 ( 각 숫자의 개수를 구함... F(1), F(2) 등등 )
const table = [];
target.forEach((v) => {
if (!table[v]) table[v] = 0;
table[v]++;
});
// 역순으로 확인함을 인지
target.forEach((v, i) => {
// 제일 마지막 숫자는 오큰등수가 존재할 수 없기 때문에 항상 -1
if (i === 0) answer.push(-1);
else {
// 스택에서 현재 숫자보다 작은 숫자 모두 제외 ( 현재 숫자보다 작으면서 더 우측에 있는 숫자는 오큰등수가 될 수 없음 )
// 오큰등수이기 때문에 테이블을 이용해서 비교
while (table[v] >= table[stack[stack.length - 1]]) stack.pop();
// 스택이 모두 비었다면 오큰등수가 존재하지 않기 때문에 -1
if (stack.length === 0) answer.push(-1);
// 스택에 숫자가 존재한다면 최상위에 존재하는 숫자가 오큰등수
else answer.push(stack[stack.length - 1]);
}
// 현재 숫자를 스택에 넣어주기
stack.push(v);
});
console.log(answer.reverse().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 string = input;
let answer = [];
let temp = null;
string.split("").map((v, i) => {
temp = v.charCodeAt();
// 소문자일 경우
if (temp >= 97 && temp <= 122) {
// 범위 초과 ( -1 이유는 97부터 "a"이기 때문에 )
if (temp + 13 > 122) answer.push(97 + temp + 13 - 122 - 1);
else answer.push(temp + 13);
}
// 대문자일 경우
if (temp >= 65 && temp <= 90) {
if (temp + 13 > 90) answer.push(65 + temp + 13 - 90 - 1);
else answer.push(temp + 13);
}
// 알파벳이 아닐 경우
if (answer.length !== i + 1) answer.push(temp);
});
console.log(String.fromCharCode(...answer));
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 [x, y, z, r] = input.split(" ");
const answer = +(x + y) + +(z + r);
console.log(answer);
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 answer = [];
const word = input;
// 하나씩 잘라서 배열에 넣기
word.split("").forEach((v, i) => answer.push(word.slice(i)));
// 알파벳순으로 정렬
answer.sort();
console.log(answer.join("\n"));
process.exit();
});