본문 바로가기
개발 노트/백준, 프로그래머스 풀이

[백준 2870/javascript] 수학숙제

by tokkiC 2022. 9. 18.

type error 가 여러번 떠서 뭐가 문제지 꽤나 시간이 걸린 문제였다...

문제 자체는 문자열에 정규표현식을 써서 숫자로 이루어진 문자열을 추출하고,

그걸 다시 replace 함수를 통해 정규표현식으로 0을 빼도록 해주면 되는 문제이다

큰 수인 만큼 BigInt 를 써도 되지만 정규 표현식을 연습할겸 정규 표현식만으로 풀려고 해보았다

type error 의 원인은 문자열에 숫자가 포함되지 않아 정규표현식의 결과가 NULL 인 경우였다

NULL을 다시 replace 정규식에 넣으니 타입에러가 뜬 것이다

정규표현식 을 중복해서 사용하여 필터링 할 때, 이전 결과가 NULL 값인 경우도 꼭 고려하자! 

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

 

2870번: 수학숙제

종이에서 찾은 숫자의 개수를 M이라고 하면, 출력은 M줄로 이루어져야 한다. 각 줄에는 종이에서 찾은 숫자를 하나씩 출력해야 한다. 이때, 비내림차순으로 출력해야 한다. 비내림차순은 내림차

www.acmicpc.net

let input = [];

const readline = require("readline").createInterface({
  input: process.stdin,
  output: process.stdout,
});

readline.on("line", (line) => {
  input.push(line);
});

readline.on("close", () => {
  solution(input);
  process.exit();
});

const solution = (inp) => {
  inp.shift();
  let regex = /\d+/g;
  let arr = [];
  for (el of inp) {
    let chk = el.match(regex);
    if (chk === null) {
      continue;
    }
    for (eli of chk) {
      let temp = "";
      temp = eli.replace(/^0+/, "");
      if (temp === "") {
        temp = "0";
      }
      arr.push(temp);
    }
  }
  arr.sort((a, b) => {
    if (a.length < b.length) {
      return -1;
    }
    if (a.length > b.length) {
      return 1;
    }
    for (let i = 0; i < a.length; i++) {
      if (a[i] < b[i]) {
        return -1;
      }
      if (a[i] > b[i]) {
        return 1;
      }
    }
    return 0;
  });
  console.log(arr.join("\n"));
};

댓글