JavaScript 백준 온라인 알고리즘 공부
백준 1157 번 Node.js 문제풀이
// 첫번째 제출
const fs = require("fs");
const input = (
process.platform === "linux"
? fs.readFileSync("/dev/stdin").toString()
: `baaa`
)
.trim()
.split("\n");
let alphCountArr = [];
let maxCount = 0;
let overlapCount = 0;
let answer;
let words = input[0].toUpperCase().split("");
let a = "A".charCodeAt();
let z = "Z".charCodeAt();
for (let i = a; i <= z; i++) {
let count = 0;
let alph = String.fromCharCode(i);
let position = words.indexOf(alph);
while (position !== -1) {
count++;
position = words.indexOf(alph, position + 1);
if (count >= maxCount) {
maxCount = count;
answer = String.fromCharCode(i);
}
}
alphCountArr += count;
}
let countArr = alphCountArr.indexOf(maxCount);
while (countArr !== -1) {
overlapCount++;
countArr = alphCountArr.indexOf(maxCount, countArr + 1);
if (overlapCount >= 2) {
answer = "?";
}
}
console.log(answer);
// 중복을 제거하는 코드를 수정하고 제출
const fs = require("fs");
const input = (
process.platform === "linux"
? fs.readFileSync("/dev/stdin").toString()
: `baaa`
).trim();
let alphCountArr = [];
let maxCount = 0;
let answer;
let words = input.toUpperCase().split("");
let a = "A".charCodeAt();
let z = "Z".charCodeAt();
for (let i = a; i <= z; i++) {
let count = 0;
let alph = String.fromCharCode(i);
let position = words.indexOf(alph);
while (position !== -1) {
count++;
position = words.indexOf(alph, position + 1);
if (count >= maxCount) {
maxCount = count;
answer = String.fromCharCode(i);
}
}
alphCountArr += count;
}
let newArr = alphCountArr.split("").sort((a, b) => a - b);
let lastPos = newArr[newArr.length - 1];
let laftPos = newArr[newArr.length - 2];
if (lastPos === laftPos) {
answer = "?";
}
console.log(answer);
분명 VScode에서 모든 예제 입출력이 정상적으로 나오는 걸 확인하고 코드를 제출했으나 채점 50%지점에 이르자 틀렸다는 판정이 나왔다.
혹시나해서 알파벳 중복을 고르는 코드를 while문이 없게 고쳤지만 오히려 틀렸다는 판정이 곧바로 나왔다. 채점의 기준이 궁금한 경우가 아닐 수 없었다.
const fs = require("fs");
const input = (
process.platform === "linux"
? fs.readFileSync("/dev/stdin").toString()
: `aaaaaaaaaaaaaaaaaajjjdddddddddddddddddddddddddddddddddddddddddZ`
).trim();
let alphCountArr = [];
let maxCount = 0;
let answer;
let words = input.toUpperCase().split("");
let overlapCount = 0;
let a = "A".charCodeAt();
let z = "Z".charCodeAt();
for (let i = a; i <= z; i++) {
let count = 0;
let alph = String.fromCharCode(i);
let position = words.indexOf(alph);
while (position !== -1) {
count++;
position = words.indexOf(alph, position + 1);
if (count >= maxCount) {
maxCount = count;
answer = String.fromCharCode(i);
}
}
alphCountArr += count; //<--- count라는 숫자가 alphCountArr배열로 들어가면
// 요소끼리 찰떡같이 붙어 넣는걸 반복하게 된다.
}
.
.
.
.
// alphCountArr의 아웃풋의 결과는
// 1800410000030000000000000001
.
.
.
for (let i = a; i <= z; i++) {
let count = 0;
let alph = String.fromCharCode(i);
let position = words.indexOf(alph);
while (position !== -1) {
count++;
position = words.indexOf(alph, position + 1);
if (count >= maxCount) {
maxCount = count;
answer = String.fromCharCode(i);
}
}
alphCountArr.push(count); // push()를 이용해야 요소를 각자 감싸는 배열이 생성된다.
}
.
.
.
split("")
메서드가 요긴하지만 빈 배열에 하나하나씩 받는건 안통하며 push()
가 가장 무난한 선택이라는 걸 뼈저리게 느꼈다.