읽는 데 2분 13. November 2020
(Node.js) 백준 10820번 문자열 분석 문제

백준 10820번 문자열 분석

차례로 주어지는 문자열에서 소문자, 대문자, 숫자, 공백의 수를 각각 출력하면 되는 문제, 자바스크립트의 정규식을 이용하면 간단하게 풀 수 있다.

각각의 방법은 다음과 같다.

  • 문자열에서 정규식으로 대문자를 모두 지운 문자열의 길이를 원본 문자열의 길이에서 빼면 대문자의 갯수다.
  • 문자열에서 정규식으로 소문자를 모두 지운 문자열의 길이를 원본 문자열의 길이에서 빼면 소문자의 갯수다.
  • 문자열에서 정규식으로 숫자를 모두 지운 문자열의 길이를 원본 문자열의 길이에서 빼면 숫자의 갯수다.
  • 문자열에서 정규식으로 공백을 모두 지운 문자열의 길이를 원본 문자열의 길이에서 빼면 공백의 갯수다.

다만 Node.js 환경에서 입력을 받게 되면 가장 끝 부분에 \n까지 입력받기 때문에 trim 메서드로 지워주는데, 만약 공백으로만 이루어진 문자열이 주어질 수도 있기 때문에 따로 처리가 필요하다.

풀이

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

const t = input.filter(str => str.length < 1)

if (t.length) {
  input.splice(input.indexOf(t[0]), 1)
}

input.forEach(str => {
  const lower = str.length - str.replace(/[a-z]/g, '').length
  const upper = str.length - str.replace(/[A-Z]/g, '').length
  const num = str.length - str.replace(/[0-9]/g, '').length
  const blank = str.length - str.replace(/\ /g, '').length

  console.log(lower, upper, num, blank)
})

문자열에 대해 입력을 받고 \n로 문자열을 자른다. 자른 문자열 중 아무런 문자를 담지 않는 배열은 제거하고 실행한다.