백준-Node.js-2857번, FBI ❓

송철진·2023년 2월 13일
0

백준-Node.js

목록 보기
22/71
post-custom-banner

풀이

정규표현식, search()

const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n')

const solution = (input) => {
  const re = new RegExp(/FBI/g)
  let result = []
  for(let i = 0; i<input.length; i++){
    if(input[i].search(re) !== -1) result.push(i+1)
  }
  return result.length !== 0 ? result.join(' ') : "HE GOT AWAY!"
}
console.log(solution(input))

split()

const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n')

const solution = (input) => {
  let result = []
  for(let i = 0; i<input.length; i++){
    if(input[i].split("FBI").length > 1) result.push(i+1)
  }
  return result.length === 0 ? "HE GOT AWAY!" : result.join(" ")
}

console.log(solution(input))

문자열 "FBI"가 존재하면 split() 했을 때 배열의 길이가 2이상이 되는 특징을 이용했다.

틀린 풀이 ❓

왜인지 모르겠는데 test()를 써서 풀었을 땐 틀렸습니다라고 뜬다.

const fs = require('fs')
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n')

const solution = (input) => {
  const re = new RegExp(/FBI/g)
  let result = []
  for(let i = 0; i<input.length; i++){
    if(re.test(input[i])) result.push(i+1)  
  }
  return result.length === 0 ? 'HE GO
T AWAY!' : result.join(' ')
}

console.log(solution(input))

각 예제 케이스는 출력이 정답과 동일한데 틀린 이유를 모르겠다..

RegExp.prototype.test()

  • test() 메서드는 주어진 문자열이 정규 표현식을 만족하는지 판별하고, 그 여부를 true 또는 false로 반환한다.
  • 패턴이 문자열 내에 존재하는지에 대한 여부를 알아보고자 할 때 test()를 사용한다. 일치의 위치 인덱스, 또는 일치하지 않으면 -1을 반환하는 String.prototype.search()와 달리 test()는 불리언을 반환한다.
regexObj.test(str)

String.prototype.search()

  • search() 메서드는 정규 표현식과 이 String 객체간에 같은 것을 찾기 위한 검색을 실행한다.
str.search(regexp)
profile
검색하고 기록하며 학습하는 백엔드 개발자
post-custom-banner

0개의 댓글