Frontend/코딩테스트 (JS)
[백준] 2941번. 크로아티아 알파벳 ( 하.. 해결했다. ) + 정답 풀이
dev6v6
2025. 1. 23. 14:29
문제의 코드 (1차)
const fs = require("fs");
const word = fs.readFileSync(0, "utf-8").toString().trim();
const alpha = [];
for (const char of word) {
if (alpha.length === 0) {
alpha.push(char);
} else {
if (
char === "=" && // "c=", "dz=", "s=", "z="을 하나의 문자로 취급
(alpha.at(-1) === "c" ||
alpha.at(-1) === "dz" ||
alpha.at(-1) === "s" ||
alpha.at(-1) === "z")
) {
alpha.pop();
alpha.push("=");
} else if (char === "j" && (alpha.at(-1) === "l" || alpha.at(-1) === "n")) {
alpha.pop();
alpha.push("j"); // "lj", "nj"을 하나의 문자로 취급
} else if (char === "-" && (alpha.at(-1) === "c" || alpha.at(-1) === "d")) {
alpha.pop();
alpha.push("-"); // "c-", "d-"을 하나의 문자로 취급
} else if (char === "z" && alpha.at(-1) === "d") {
alpha.pop();
alpha.push("dz"); // "dz"를 하나의 문자로 취급
} else if ( char === "=" || char === "-") {
continue; // 그 외의 "=", "-"는 알파벳이 아니므로 아무것도 안함.
} else alpha.push(char);
}
}
console.log(alpha.length);
내 풀이는 왜 틀릴까... ㅜㅠㅠㅠ 가끔씩 보면서 반례 찾아봐야겠다.
(2차) 으아ㅏㅏ
"dz=" 이거 때문에 "dz"를 한 문자로 처리 했는데 만약 "=" 가 나오지 않으면 'd', 'z'로 처리되지 않고 'dz'로 남아버린다.
if (char !== "=" && alpha.at(-1) === "dz") {
alpha.push(char);
}
-> ( 80퍼까지 성공했따...) 또 틀림 ...
-> dzdzdz같은 경우 마지막 dz는 그 뒤에 문자가 없기 때문에 분리를 못하고 남아버린다.. [dz, z, dz, z, dz]이렇게
-> 대공사 일거같아서 아예 dz를 한 문자로 처리하는 과정을 없앴다.
(3차) 드디어.. 성공 근데 꼭 맨 아래의 정답 풀이를 익히자.. 이렇게 풀지 말자 ㅠㅠㅠ
헷갈릴까봐 크로아티아 알파벳은 모두 "*" 라는 문자로 통일시켰다.
const fs = require("fs");
const word = fs.readFileSync("ex.txt", "utf-8").toString().trim();
const alpha = [];
for (const char of word) {
if (char !== "=" && alpha.at(-1) === "dz") {
alpha.push(char);
}
if (alpha.length === 0) {
alpha.push(char);
} else {
if (char === "=") {
if (alpha.at(-1) === "c" || alpha.at(-1) === "s") { // c, s만 그대로 남기고
alpha.pop();
alpha.push("*");
} else if (alpha.at(-1) === "z") { // z,와 dz는 따로 처리해줌.
if (alpha.at(-2) === "d") {
alpha.pop();
alpha.pop();
alpha.push("*");
} else {
alpha.pop();
alpha.push("*");
}
}
} else if (char === "j" && (alpha.at(-1) === "l" || alpha.at(-1) === "n")) {
alpha.pop();
alpha.push("*"); // "lj", "nj"을 하나의 문자로 취급
} else if (char === "-" && (alpha.at(-1) === "c" || alpha.at(-1) === "d")) {
alpha.pop();
alpha.push("*"); // "c-", "d-"을 하나의 문자로 취급
} else if (char === "=" || char === "-") {
continue; // 그 외의 "=", "-"는 알파벳이 아니므로 아무것도 안함.
} else alpha.push(char);
}
}
console.log(alpha.length);
다른 사람들 거 참고한 풀이!! 2가지 방법 (정답)
const fs = require("fs");
let word = fs.readFileSync(0, "utf-8").toString().trim();
const croatia = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="];
for (const alpha of croatia){
word = word.replaceAll(alpha,"*");
// word = word.split(alpha).join("*"); 이렇게 푸는 것도 같은 방법
}
console.log(word.length);