본문 바로가기
Algorithm/Baekjoon

백준 2941번

by minhi 2025. 2. 14.

백준 2941번을 풀어보았다.

 

이 문제의 핵심은 문자열 대체이다.

 

특정 문자열이 존재하는지 확인하고, 존재할 경우 * 등으로 대체한다. 이후 전체 문자열의 길이를 출력한다.

 

크게 다음의 4가지 풀이로 정리해보았다.

  • split().join() 사용
  • replace 메소드 사용
  • replaceAll 메소드 사용
  • 정규표현식 사용

 

split().join() 사용

let word = require('fs').readFileSync('/dev/stdin').toString().trim()

const croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']

for (const c of croatia) {
  word = word.split(c).join('*')
}

console.log(word.length)

 

전체 문자열을 특정 문자열을 기준으로 split하고 *로 join한다.

 

결과적으로는 특정 문자열을 *로 대체한 것과 동일하다.

 

replace 메소드 사용

let word = require('fs').readFileSync('/dev/stdin').toString().trim()

const croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']

for (const c of croatia) {
  while (word.includes(c)) {
    word = word.replace(c, '*')
  }
}

console.log(word.length)

 

전체 문자열이 특정 문자열을 includes하는지 확인하고, includes할 경우 *로 replace한다.

 

이때 특정 문자열이 여러 번 존재할 수도 있으므로 while문을 통해 이 과정을 특정 문자열이 존재할 때까지 반복한다.

 

replaceAll 메소드 사용

let word = require('fs').readFileSync('/dev/stdin').toString().trim()

const croatia = ['c=', 'c-', 'dz=', 'd-', 'lj', 'nj', 's=', 'z=']

for (const c of croatia) {
  word = word.replaceAll(c, '*')
}

console.log(word.length)

 

replace 메소드를 사용할 경우 특정 문자열이 여러 번 존재할 경우를 위해 while문을 사용해야 했다.

 

이때 replaceAll 메소드를 사용하면 이를 한 번에 처리할 수 있다.

 

정규표현식 사용

let word = require('fs').readFileSync('/dev/stdin').toString().trim()

word = word.replace(/c\=|c\-|dz\=|d\-|lj|nj|s\=|z\=/g, '*')

console.log(word.length)

 

그러나 replace 메소드의 첫번째 인자로 g 플래그가 있는 정규표현식을 전달하면 replace 메소드만으로도 이를 한 번에 처리할 수 있다.

 

정규표현식은 /로 감싸 나타내며 마지막에 g 플래그를 붙이면 전역 검색 모드*로 동작한다.

 

* g 플래그를 붙이지 않으면 처음 발견된 하나의 패턴만 replace하고, g 플래그를 붙이면 일치하는 모든 패턴을 replace한다.

 

💫 이 문제를 통해 배운 것

 

문자열을 대체하는 대표적인 메소드인 replace와 replaceAll은 아래와 같은 형태를 가진다.
replace(pattern, replacement)
replaceAll(pattern, replacement)​

이때 pattern은 문자열이거나 Symbol.replace 메소드가 있는 객체로, 일반적인 예로 정규표현식이 있다.

정규표현식은 /로 감싸 나타내며 g 플래그로 전역 검색 모드를 설정할 수 있다.

replaceAll의 pattern이 정규표현식일 경우 무조건 g 플래그를 붙여야 한다.

'Algorithm > Baekjoon' 카테고리의 다른 글

백준 24313번  (0) 2025.02.12
백준 24267번  (0) 2025.02.12
백준 24266번  (1) 2025.02.01
백준 1157번  (0) 2025.01.23
백준 11653번  (0) 2025.01.22