[JS] 백준 2941 - 크로아티아 알파벳

n-u·2022년 8월 11일
0

Algorithm

목록 보기
32/33
post-thumbnail

백준 2941 - 크로아티아 알파벳

https://www.acmicpc.net/problem/2941

❌ 제출한 풀이1

let input = fs.readFileSync(file).toString().trim();
const croatiaAlph = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="];

for (let i = 0; i < croatiaAlph.length; i++) {
  input = input.replaceAll(croatiaAlph[i], 0);
}
console.log(input.length);
  • replace()메서드는 동일한 문자를 중에 일치하는 문자 중 첫번째만 치환시켜준다.
  • replaceAll()메서드를 이용하여 입력받는 문자열의 일치하는 문자를 0으로 치환하는 방향으로 문제를 풀었다.

    그런데, 이 문제가 만들어진지 오래 되어서 그런지 최근에 추가된 메서드를 쓰지 못하는 것인지...알 수는 없지만, 계속 오답으로 채점이 되어서 다른 방법을 찾아보았다.

replaceAll()은 ECMA-262 12th(2021) 스펙 기준으로 추가된 메서드여서 최신개발환경이 아니라면 사용이 어려운 것같다.

⭕ 제출한 풀이2

let input = fs.readFileSync(file).toString().trim();
const croatiaAlph = ["c=", "c-", "dz=", "d-", "lj", "nj", "s=", "z="];

for (let elem of croatiaAlph) {
  input = input.split(elem).join("0");
}
console.log(input.length);
  1. 문자 -> 분리된 배열

    • 각 배열의 요소를 input의 문자열을 같은 요소들이 있다면 split()메서드를 이용해 문자를 자른다.
  2. 분리된 배열요소 -> 문자

    • 그리고 잘려진 문자배열을 join()메서드를 이용해 배열의 요소를 문자열로 만들어주되, 기준을 join()메서드의 인자로 이어붙여준다.
  3. join()으로 변환된 문자열은 input에 재 할당되어 다음 for문의 순서에 사용된다.

elem : 1번상황 -> 2번상황 : input의 값으로 재할당된다.(3번)
"c=" : [ 'ljes=njak' ] -> ljes=njak
"c-" : [ 'ljes=njak' ] -> ljes=njak
"dz=" : [ 'ljes=njak' ] -> ljes=njak
"d-" : [ 'ljes=njak' ] -> ljes=njak
"lj" : [ '', 'es=njak' ] -> 0es=njak
"nj" : [ 'ljes=', 'ak' ] -> 0es=0ak
"s= : [ 'lje', 'njak' ] -> 0e00ak
"z=" : [ 'ljes=njak' ] -> 0e00ak

풀면서 알게 된 것

  • replaceAll은 2021의 아주 최신버전 기능이여서 적용되지 않는 곳이 있을 수 있다.
  • let 요소 in 배열 : map()메서드 처럼 사용 가능한 반복문 조건
  • 문자 치환 관련해서는 정규표현식을 이용해야 좋을 것 같다.. 공부할거 너무 많은데?ㅎㅎ

Reference

split(),join()이용 풀이 블로그
정규포현식 약간

profile
기록하며 발전하는 삶

0개의 댓글