Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 실무는 공식문서로
- 힘들었던 한주
- git
- git flow start
- 끝까지 잘 마무리하기
- 공부할 거 넘많다~
- 책으론 원리만
- fetch pull 차이
- CSS
- AJAX
- 서버 컴포넌트
- 개발일지
- 다시 홧팅
- Mac
- axios
- Main
- 바닐라JS
- 백준
- TS
- Next.js
- HTML
- 차이점
- javascript30
- JavaScript
- js
- freecodecamp
- git flow finish
- 클라이언트 컴포넌트
- jQuery
- api 라우트
Archives
- Today
- Total
다다의 개발일지 6v6
[백준] 2941번. 크로아티아 알파벳 ( 하.. 해결했다. ) + 정답 풀이 본문
문제의 코드 (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);'Frontend > 코딩테스트 (JS)' 카테고리의 다른 글
| [백준] 1157번. 단어 공부 ( for in 구문, || 연산자의 역할 ) (0) | 2025.01.23 |
|---|---|
| [백준] 10988번. 팰린드롬인지 확인하기 ( 함수 밖에 있는 return이 왜 적용될까?) (0) | 2025.01.22 |