
- bok
- koaski
- boudonuimilcbsai
- bok
- kakosi
- bombonisuuladici
| b | o | m | b |
|---|---|---|---|
| o | n | i | s |
| u | u | l | a |
| d | i | c | i |
=>bombonisuuladici
제곱근 메소드를 사용하여 input값의 길이의 약수들을 구하여 R과 C를 구해준다.
(제곱근보다 큰 약수들은 이미 작은 수를 구할 때 같이 나오는 원리를 사용한다.)
R, C값을 통해 2차원 배열을 만들어준다.
기존의 값의 행과 열을 바꾸어주어야 하기 때문에 행과 열을 바꿔서 2차원 배열에 대입해준다.
(행x열 => 열x행)
각각의 원소는 행을 기준으로 열의 길이만큼의 배로 커지는 원리를 사용한다.
예시)
| 1 | 2 | 3 |
|---|---|---|
| 4(1x1+3) | 5(1x2+3) | 6(1x3+3) |
| 7(2x1+3) | 8(2x2+3) | 9(3x2+3) |
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("");
const Sqrt = () => {
let [R, C] = [1, 0];
for (let i = 1; i < parseInt(Math.sqrt(input.length)) + 0.1; i++) {
if (input.length % i === 0) {
R = i;
C = input.length / i;
}
}
return { R, C };
};
let arr = Array.from({ length: Sqrt().R }, (_, i) =>
Array.from({ length: Sqrt().C }, (_, idx) => input[i + idx * Sqrt().R])
);
console.log(arr.flat().join(""));
문제 링크
2개의 문자열을 받고 각 문자를 교차한 후 획 수 별로 계속해서 더하여 마지막 두자리 수를 출력하시오.
알파벳 획수: 3, 2, 1, 2, 3, 3, 2, 3, 3, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1

CJM
HER
99
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const [A, B] = [input[0], input[1]];
const writeArr = [
3, 2, 1, 2, 3, 3, 2, 3, 3, 2, 2, 1, 2, 2, 1, 2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 1,
];
function asciiFunc(str, str1) {
let arr = [];
for (let i = 0; i < str.length; i++) {
arr.push(String(writeArr[str[i].charCodeAt(0) - 65]));
arr.push(String(writeArr[str1[i].charCodeAt(0) - 65]));
}
return arr;
}
let ans = asciiFunc(A, B);
while (ans.length > 2) {
let cnt = ans.length;
for (let i = 0; i < cnt - 1; i++) {
ans.push(String(Number(ans.shift()) + Number(ans[0])));
if (ans[ans.length - 1].length > 1)
ans[ans.length - 1] = ans[ans.length - 1][1];
}
ans.shift(); //마지막 합산 값 빼주기
}
console.log(ans.join(""));
문제 링크
어떤 문서에 검색하려는 키워드가 몇 번 등장하는지 출력하시오. 단, 중복 되어 세는 것은 제외
예시)
문서: abababa, 단어: ababa => 1
- ababababa
aba
- a a a a a
a a
- aaaaaaa
aa
- 2
- 2
- 3
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
const arr = input[0];
const word = input[1];
let ans = 0;
let cnt = 1;
for (let i = 0; i < input[0].length; i += cnt) {
if (arr.slice(i, word.length + i).includes(word)) {
ans++;
cnt = word.length;
} else {
cnt = 1;
}
}
console.log(ans);
문제 링크
사전:Adenine, Thymine, Guanine, Cytosine
DNA를 이루는 뉴클레오티드는 첫 글자를 따서 표현한다.
(Thymine-Adenine-Adenine-Cytosine-Thymine-Guanine-Cytosine-Cytosine-Guanine-Adenine-Thymine =>TAACTGCCGAT)
여러개의 뉴클레오티드들을 받아 각 위치에서 다른 것의 개수들이 총 몇 개 인지 출력한다.
- 5 8
TATGATAC
TAAGCTAC
AAAGATCC
TGAGATAC
TAAGATGT
- 4 10
ACGTACGTAC
CCGTACGTAG
GCGTACGTAT
TCGTACGTAA
- TAAGATAC
7
- ACGTACGTAA
6
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().split("\n");
const [N, M] = [input[0].split(" ")[0], input.shift().split(" ")[1]];
const diction = { A: 0, T: 3, G: 2, C: 1 };
let table = {};
let [ans, cnt] = [[], 0];
let j = 0;
const maxFunc = (table) => {
let [maxStr, maxNum, count] = ["", 0, 0];
for (let i of table) {
count += i[1];
if (maxNum < i[1]) {
[maxStr, maxNum] = [i[0], i[1]];
} else if (maxNum === i[1] && diction[i[0]] < diction[maxStr]) {
maxStr = i[0];
}
}
cnt += count - maxNum;
return maxStr;
};
while (ans.length < M) {
for (let i = 0; i < N; i++) {
if (!table[input[i][j]]) {
table[input[i][j]] = 1;
} else table[input[i][j]]++;
}
ans.push(maxFunc(Object.entries(table)));
table = {};
j += 1;
}
console.log(ans.join(""));
console.log(cnt);
2001:0db8:85a3:0000:0000:8a2e:0370:73342001:db8:85a3:0:00:8a2e:370:73342001:db8:85a3::8a2e:370:7334축약된 IPv6를 축약되기 전으로 출력하시오.
- 25:09:1985:aa:091:4846:374:bb
- ::1
- 0025:0009:1985:00aa:0091:4846:0374:00bb
- 0000:0000:0000:0000:0000:0000:0000:0001
축약된 IPv6가 맨 앞 혹은 길이가 8개 미만인지 확인하여 2번 규칙으로 축약이 되는지 확인한다.
만일 2번 방법으로 축약됬을 경우 각 빈 자리가 어디인지 확인해주고, 처음 input값을 받았을 때 .split(":")나누었을 때 :이 2개 일 경우 빈 배열이 생기기 때문에 빈 배열이 생기는 부분에 "0000"을 채워준다.
만일 처음이 빈 배열인 경우에는 빈 문자열이 총 2가지 생겨 IPv6의 길이 8에서 배열의길이-2를 통해서 "0000"를 몇 개 채울지 확인해고, 그 뒤에 빈 문자열을 제외한 나머지 배열 값들을 채워준다.
나머지 일 경우에는 위와 같지만 이 경우에는 빈 배열이 하나만 생겨 8-(배열 길이 -1)을 통해 "0000"을 몇 개 채울지 확인하고, 빈 문자열의 인덱스를 확인하여 그 인덱스 자리에 "0000" 배열을 넣어준다.
마지막으로 배열들의 각 원소의 길이가 4가 될 때까지 "0"으로 채워준다.
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim();
let inputArr = input.split(":");
function fillFunc(arr) {
if (inputArr[0] === "") {
let cnt = 8 - (arr.length - 2);
let fillArr = Array.from({ length: cnt }, () => "0000");
inputArr = [...fillArr, ...arr.slice(2, inputArr.legnth)];
return;
} else {
let cnt = 8 - (arr.length - 1);
let blank = arr.indexOf("");
let fillArr = Array.from({ length: cnt }, () => "0000");
inputArr = [...arr.slice(0, blank), ...fillArr, ...arr.slice(blank + 1)];
}
}
if (inputArr.length < 8 || inputArr.includes("")) fillFunc(inputArr);
for (let i = 0; i < inputArr.length; i++) {
while (inputArr[i].length < 4) {
inputArr[i] = "0" + inputArr[i];
}
}
console.log(inputArr.join(":"));