Code
😢 단순 조건문 처리로는 풀기 싫어서, 어렵게 풀려다가 생각하는 시간이 조금 걸렸다.
그리고 문제를 보자마자 Regular Expression이 떠올라서, RegExp로 풀려고 공부를 조금 했다.
😊 조건문으로만 풀기에는 뭔가 문제가 아까웠다. 그래서 이런 방법 저런 방법을 시도해봤다. (물론 단순 조건으로도 풀어봤다)
regex변수에 크로아티아 알파벳 조건들을 입력해주고 replace() 에 주입하여, 만약 일치하는 것이 있다면 공백(' ')으로 만들어줬다.
RegExp 구성을 살펴보겠다. 아주 간단하다.
=, -와 같은 문자들은 특수문자이기 때문에 특별하다는 뜻으로 \(backslash, escape라고도 부른다)를 앞에 붙여줘야 하고,
그 외 조건들은 |(or)문자를 사용해서 구분해주었고, g를 붙여 Global search를 해줬다.
결과적으로 2개 이상 문자를 갖는 크로아티아 알파벳은 공백으로 변경되어 1개의 문자를 갖게 된다.
따라서 결과의 length를 출력해주면 크로아티아 알파벳의 개수를 알 수 있다.
(조건 외의 알파벳은 1개로 치니까 따로 처리하지 않는다)
Full Code에 단순 조건문 처리로 푼 예제도 있으니 참고하길 바란다.
✔ String.prototype.replce()
크로아티아 알파벳만의 조건을 넣어서, 공백(' ')으로 변경해주기 위해 사용했다.
✔ Regular Expressions
문자열을 다루기 위한 정규표현식이다. 크로아티아 알파벳 조건을 표현하기 위해 사용하였다.
위의 Skill들은 JavaScript - helper methods 카테고리에서 간단한 사용방법을 확인할 수 있다.
Full Code
// Croatia Alphabet |
// 1st Solution(Regular Expressions) |
// For submit |
// const fs = require('fs'); |
// const input = fs.readFileSync('/dev/stdin').toString().trim(); |
// For local test |
const input = 'ljes=njak'; |
var regex = /c\=|c\-|dz\=|d\-|lj|nj|s\=|z\=/g; |
const result = input.replace(regex, ' '); |
console.log(result.length); |
// 2nd Solution(while, idx, if else) |
// For submit |
// const fs = require('fs'); |
// const input = fs.readFileSync('/dev/stdin').toString().trim(); |
// For local test |
// const input = 'ljes=njak'; |
// let idx = 0; |
// let counter = 0; |
// while (idx < input.length) { |
// if ( |
// input[idx] === 'c' && |
// (input[idx + 1] === '=' || input[idx + 1] === '-') |
// ) { |
// idx += 2; |
// counter++; |
// } else if ( |
// input[idx] === 'd' && |
// input[idx + 1] === 'z' && |
// input[idx + 2] === '=' |
// ) { |
// idx += 3; |
// counter++; |
// } else if (input[idx] === 'd' && input[idx + 1] === '-') { |
// idx += 2; |
// counter++; |
// } else if ( |
// input[idx + 1] === 'j' && |
// (input[idx] === 'l' || input[idx] === 'n') |
// ) { |
// idx += 2; |
// counter++; |
// } else if (input[idx] === 's' && input[idx + 1] === '=') { |
// idx += 2; |
// counter++; |
// } else if (input[idx] === 'z' && input[idx + 1] === '=') { |
// idx += 2; |
// counter++; |
// } else { |
// idx++; |
// counter++; |
// } |
// } |
// console.log(counter); |
// 3rd Solution(shift, while, if else) |
// For submit |
// const fs = require('fs'); |
// const str = fs.readFileSync('/dev/stdin').toString().trim().split(''); |
// For local test |
// const str = 'ljes=njak'.split(''); |
// let counter = 0; |
// while (str.length) { |
// if (str[0] === 'c' && (str[1] === '=' || str[1] === '-')) { |
// counter++; |
// str.shift(); |
// str.shift(); |
// } else if (str[0] === 'd' && str[1] === 'z' && str[2] === '=') { |
// counter++; |
// str.shift(); |
// str.shift(); |
// str.shift(); |
// } else if (str[0] === 'd' && str[1] === '-') { |
// counter++; |
// str.shift(); |
// str.shift(); |
// } else if (str[1] === 'j' && (str[0] === 'l' || str[0] === 'n')) { |
// counter++; |
// str.shift(); |
// str.shift(); |
// } else if (str[0] === 's' && str[1] === '=') { |
// counter++; |
// str.shift(); |
// str.shift(); |
// } else if (str[0] === 'z' && str[1] === '=') { |
// counter++; |
// str.shift(); |
// str.shift(); |
// } else { |
// counter++; |
// str.shift(); |
// } |
// } |
// console.log(counter); |
'Algorithm > JavaScript(Node.js)' 카테고리의 다른 글
백준 1712번: 손익분기점(Break-Even Point) Node.js(JavaScript) (0) | 2020.01.09 |
---|---|
백준 1316번: 그룹 단어 체커(Group Word Checker) Node.js(JavaScript) (0) | 2020.01.09 |
백준 5622번: 다이얼(Dial) Node.js(JavaScript) (0) | 2020.01.06 |
백준 2908번: 상수(A man named Sangsu) Node.js(JavaScript) (0) | 2020.01.05 |
백준 1157번: 단어 공부(Word Study) Node.js(JavaScript) (0) | 2020.01.04 |