문제
풀이
const readFileSyncAddress = '/dev/stdin';
const fs = require('fs');
let str = fs.readFileSync(readFileSyncAddress).toString().trim();
const croatian = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z='];
const solution = function (str) {
for (let x of croatian) str = str.replaceAll(x, 'x');
return str.length;
};
console.log(solution(str));
- 현재 순회중인 크로아티안 알파벳
x
와 일치하는str
의 요소는'x'
문자열로 변경한 뒤 그 길이를 반환하였다.
- 처음 문제에 접근할 때는,
str.includes()
메서드를 이용해서true
일 때str
에서 해당 부분만 제외하고 재할당을 하는 방식으로 접근했다.
if(str.includes(croatian[i]))
str = str - str.substring(str.indexOf(croatian[i]),croatian.length);
- 문자열에서 내가 원하는 부분을 추출해서 그 부분을 없애고 싶어서
-
를 해봤는데 (+
는 되길래)NaN
이 나왔다. - 찾아보니
+
연산에서는 값의 type을 검사하지만,-
연산은 숫자만을 대상으로 하기 때문에 type 검사를 하지 않는다고 한다. 숫자가 아닌 경우에는 쓸 수 없다. substring
에서indexOf
를 쓴 이유는 이 메서드가 가장 첫번째 인덱스를 반환하기 때문에, 다음 순회에서 중복된 값도 카운트하기 위해서 사용했다.- 같은 값이 나오면 카운트를 올리고, 해당 알파벳 부분은 제거한 다음에 남은
str
의 길이를 카운트와 더해서 리턴하려고 했는데, 문자열에서 특정 부분을 추출하여 사용하는 것이 아니라면replace
같은 메서드를 이용해서 특정 부분을 제거하거나 변경하는 것이 옳은 방법인 것 같다.
참고자료
'Algorithm & 자료구조 > 알고리즘 w.JavaScript' 카테고리의 다른 글
[알고리즘] 백준 1712번: 손익분기점 W_node.js (0) | 2022.05.20 |
---|---|
[알고리즘] 백준 1316번: 그룹 단어 체커 W_node.js (0) | 2022.05.11 |
[알고리즘] 백준 5622번: 다이얼 W_node.js (0) | 2022.05.10 |
[알고리즘] 백준 1157번: 단어 공부 W_node.js (0) | 2022.05.01 |
[알고리즘] 백준 2675번: 문자열 반복 W_node.js (0) | 2022.05.01 |