[알고리즘] 백준 2870 수학숙제(JS)

Daon·2023년 3월 23일
0

알고리즘

목록 보기
3/11
post-thumbnail

백준 2870 수학숙제 문제이다.

요구사항
1. 문자열 사이에 숫자를 따로 빼내야한다.
2. 숫자 앞의 0은 제거
3. 0만 있는 숫자일경우 단하나의0만출력
4. 오름차순

function check(ret, result) {
  while (true) {
    if (ret && ret[0] == "0") {
      ret = ret.replace(/(^0+)/, "");
    } else break;
  }

  if (!ret) ret = "0";
  result.push(ret);
}

function solution(n, strs) {
  const result = [];
  let ret;
  for (let i = 0; i < n; i++) {
    let ss = strs[i];
    ret = "";
    for (let j = 0; j < ss.length; j++) {
      let s = ss[j];
      if (s.charCodeAt(0) < 65) ret += s;
      else if (ret) check(ret, result), (ret = "");
    }
    if (ret) check(ret, result), (ret = "");
  }
  result.sort((a, b) => a - b);
  console.log(result);
}

let strs = ["43silos0", "zita002", "le2sim", "231233"];
solution(4, strs);

처음에는 정규표현식으로 숫자만 걸러서 해볼까 했지만
전체 숫자만 출력이 되고 따로 따로는 해결방법을 찾지못해서 아스키코드로 문제를 해결하였다.
영어 소문자는 65부터 시작하고 숫자는 65보다 아스키코드가 작다 그러므로
처음 if(s.charCodeAt(0) < 65)를 통하여 1.요구사항을 해결하였다.
그리고 연속되는 숫자는 ret에 담고 연속이 끝나면 check함수를 통하여 문자열 앞의 0을 제거하고
완전 0일 경우에는 기본값 0으로 할당한 후에 result 배열에 push하였다.
그리고 if(ret) 체크를 통하여 완전 숫자 문자열일 경우도 체크해 주었고
마지막으로 sort 함수를 통하여 오름차순으로 정렬하였다
(동적 프로그래밍 언어인 JS에서는 암묵적 형변환이 일어나기 떄문에 문자열인 숫자를 그냥 써도 무방하다)

profile
같이 일하고싶은 그런 개발자!

0개의 댓글