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", () => {
console.log(input.charCodeAt());
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.length >= 2 && input[1].length === +input[0]) rl.close();
}).on("close", () => {
const answer = input[1].split("").reduce((prev, curr) => prev + +curr, 0);
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", () => {
let answer = "";
const array = Array(26)
.fill()
.map(() => -1);
input.split("").forEach((v, i) => (array[v.charCodeAt() - 97] === -1 ? (array[v.charCodeAt() - 97] = i) : null));
array.forEach(v => (answer += `${v} `));
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.length >= 2 && input.length - 1 === +input[0]) rl.close();
}).on("close", () => {
input.shift();
let answer = "";
let output = input.map(value => {
// 반복횟수와 반복문자열 분리
const tempArray = value.split(" ");
return tempArray[1].split("").map(v => {
let tempString = "";
for (let i = 0; i < +tempArray[0]; i++) {
tempString += v;
}
return tempString;
});
});
output.forEach(v => (answer += `${v.join("")}\n`));
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", () => {
let maxValue = 0;
let count = 0;
const array = Array(26)
.fill()
.map(() => 0);
input
.toUpperCase()
.split("")
.forEach(v => array[v.charCodeAt() - 65]++);
maxValue = array.reduce((prev, curr) => (prev > curr ? prev : curr));
array.forEach(v => (v === maxValue ? count++ : null));
console.log(count >= 2 ? "?" : String.fromCharCode(array.indexOf(maxValue) + 65));
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 = input.trim().split(" ").length;
console.log(input === " " ? 0 : 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 temp = input.split(" ");
const frontValue = temp[0].split("").reverse().join("");
const backValue = temp[1].split("").reverse().join("");
console.log(+frontValue > +backValue ? frontValue : backValue);
process.exit();
});
/**
* A ~ Z까지 8개의 구역으로 나눔
* 3, 3, 3, 3, 3, 4, 3, 4 (개)
* 3, 4, 5, 6, 7, 8, 9, 10 (초)
*
* 앞 5개는 3개씩 일관성 있게 처리하고
* 나머지 3개는 다르게 처리
*/
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 array = Array(8)
.fill()
.map(() => 0);
input.split("").forEach(v => {
const code = v.charCodeAt() - 65;
const index = Math.floor(code / 3);
// 일반 처리
if (code < 15) {
array[index]++;
} else {
switch (code) {
case 15:
case 16:
case 17:
case 18:
array[5]++;
break;
case 19:
case 20:
case 21:
array[6]++;
break;
case 22:
case 23:
case 24:
case 25:
array[7]++;
break;
default:
break;
}
}
});
const answer = array.reduce((prev, curr, index) => curr * (index + 3) + prev, 0);
console.log(answer);
process.exit();
});
처음에 생각했던 방법은 최초에 입력한 문자열에서 크로아티아 알파벳(이후 ca)를 찾을 때마다 slice()
를 이용해서 ca만 제거하는 방법으로 계속 처리하려고 했다.
하지만 생각지 못했던 문제가 ddz=z=
같은 문자열은 dz=
를 제거하면 또 dz=
이 남아서 두 번 체크해버리는 문제가 생겼다.
그래서 다른 방법으로 indexOf()
의 두 번째 인자인 index
부분을 이용해서 앞서 확인했던 ca 이후부터 다시 검사하는 방식으로 ca의 개수만 세고 문자열에서 제거하지는 않으며 동시에 제거해야 할 개수만 업데이트하면서 마지막 남은 문자열의 개수와 ca의 개수를 구하는 방식을 취했다.
그런데 또 생각하지 못했던 문제가 dz=
같은 경우에는 dz=
와 z=
에서 두 번 걸려버리는 문제가 발생해서 특별하게 조건 처리를 이용해서 해결했다. ( 조금은 하드코딩을 한 것처럼 느껴짐 )
/**
* 크로아티아 알파벳을 포함하면 잘라서 없애고 count++
* 크로아티아 알파벳의 개수 => 크로아티아 알파벳 개수
* 전체 문자열 길이 - 크로아티아 알파벳 개수 => 남은 문자열 개수
* 정답 => 크로아티아 알파벳 개수 + 남은 문자열 개수
* 추가로 "dz="과 "z="은 중복되는 부분이 존재해서 특별처리해줌
*/
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = null;
let inputStringLength = 0;
let count = 0;
const testFunc = (string, candidate, index = 0) => {
if (string.includes(candidate, index)) {
const startIndex = string.indexOf(candidate, index);
const lastIndex = startIndex + candidate.length;
index = lastIndex;
inputStringLength -= candidate.length;
count++;
// "dz="과 "z="의 처리때문에
if (candidate === "dz=") {
count--; // "z="에서 count + 1 하기때문에
inputStringLength += 2; // "dz="에서 -3, "z="에서 -2 이기 때문에 이후에 -2할꺼 미리 +2해서 상쇄
}
}
// 재귀
if (string.includes(candidate, index)) testFunc(string, candidate, index);
};
rl.on("line", line => {
input = line;
rl.close();
}).on("close", () => {
// 크로아티아 알파벳들
const array = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="];
inputStringLength = input.length;
array.forEach(v => {
testFunc(input, v);
});
console.log(inputStringLength + count);
process.exit();
});
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
let checkArray = [];
let checkIndex = -1;
let isGroupWord = false;
let count = 0;
rl.on("line", line => {
input.push(line);
if (input.length >= 2 && input.length - 1 === +input[0]) rl.close();
}).on("close", () => {
input.shift();
input.forEach(value => {
checkArray = [];
checkIndex = -1;
// every를 사용해서 모두 false반환하는 즉시 반복 종료
isGroupWord = value.split("").every(v => {
// 최초 등장한 단어라면 체크 배열에 추가 및 인덱스 지정
if (!checkArray.includes(v)) {
checkArray.push(v);
checkIndex++;
return true;
} else {
// 이전에 등장했다면 바로 이전에 등장한건지 확인
if (v === checkArray[checkIndex]) return true;
else return false;
}
});
isGroupWord ? count++ : null;
});
console.log(count);
process.exit();
});