[백준][ts/js] 8595번 히든 넘버

Pyotato·2023년 7월 1일
0

[백준][js/ts]

목록 보기
21/21
post-thumbnail

문제

단어에 숫자가 숨어있다. 이 숫자를 히든 넘버라고 한다. 알파벳 대/소문자와 숫자로 이루어진 단어가 주어졌을 때, 모든 히든 넘버의 합을 구하는 프로그램을 작성하시오.

단어와 히든 넘버는 아래와 같은 성질을 갖는다.

  • 연속된 숫자는 한 히든 넘버이다.
  • 두 히든 넘버 사이에는 글자가 적어도 한 개 있다.
  • 히든 넘버는 6자리를 넘지 않는다.

입력

첫째 줄에 단어의 길이 n (1 ≤ n ≤ 5,000,000)이 주어진다. 둘째 줄에는 단어가 주어진다. 단어는 알파벳 대/소문자와 숫자(0-9)로 이루어져 있다.

출력

입력으로 주어진 단어에 숨어있는 모든 히든 넘버의 합을 출력한다. 만약, 히든 넘버가 없는 경우에는 0을 출력한다.

후기

파이썬으로 for문 돌렸을 때 입력값이 너무 커져서 시간초과가 날 수 밖에 없는 상황.
대신 입력값을 뒤에서부터 돌면서 숫자라면 일의 자리로, 다음 숫자가 온다면 그 숫자를 10의 자릿수로 이어주고 더해주는 식으로 접근.
구조분해를 사용해서 간단하게 자릿수,정답,일시적으로 히든 숫자들을 담을 변수를 선언해봤는데 더 깔끔해서 보기 좋은 것 같다.

풀이

{
  const error_msg = (input: string | null) => {
    input
      ? console.log(`${input}은 부적절한 입력값입니다.`)
      : console.log("값을 입력해주세요.");
  };
  const n: string | null = prompt(
    "1 ≤ n ≤ 5,000,000인 단어 길이 n을 입력해주세요."
  );
  const nums: Array<number> = new Array(9).fill(0);
  nums.map((idx, v) => (nums[idx + 1] = idx + 1)); //[0,1,2,3,4,5,6,7,8,9]
  if (n) {
    const word: string | null = prompt(`길이가 ${n}인 단어를 입력해주세요.`);
    if (word) {
      if (word.length === parseInt(n)) {
        let [place_value, ans, temp]: Array<number> = [1, 0, 0];
        for (let i = parseInt(n) - 1; i >= 0; i--) {
          //배열 뒤에서부터 item 확인
          // console.log(word[i]);
          if (nums.includes(parseInt(word[i]))) {
            temp += parseInt(word[i]) * place_value;
            place_value = place_value * 10;
          }
          if (i === 0 || !nums.includes(parseInt(word[i]))) { //맨앞에서부터 숫자가 시작하거나 숫자가 아닌 경우
            if (place_value >= Math.pow(10, 7)) {
              place_value = 1;
              temp = 0;
              continue;
            }
            ans += temp;
            place_value = 1;
            temp = 0;
          }
        }
        console.log(ans);
      } else {
        error_msg(word);
      }
    } else {
      error_msg(word);
    }
  } else {
    error_msg(n);
  }
}

/*
test

input
14
ab13c9d07jeden

output
29
*/
profile
https://pyotato-dev.tistory.com/ 로 이사중 🚚💨🚛💨🚚💨

0개의 댓글