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

[백준 1755/javascript] 숫자놀이

by tokkiC 2022. 9. 4.

22.10.28 //    자바스크립트에서 문자열을 역순으로 정렬하려면 공백이 문제가 되므로, 인자 없이 정렬 후, reverse() 함수를 사용하면 역순으로 정렬시킬 수 있다


객체를 만들어 키와 값으로 숫자에 맞는 영문을 만들어주고

세어나갈 숫자를 한개씩 객체의 키로 비교하여 영문 값을 얻어 문자열로 만들어주고

만든 문자열과 원래의 숫자를 쌍으로 만들어(요소개 2개인 배열로)

앞의 요소가 우선 sort 로 정렬되는 것을 이용하여 사전 순으로 정렬 후

뒤의 요소인 원래 숫자를 형식에 맞게 출력해주면 되는 문제이다  

근데! 자꾸 에러가 나서 이상해서 테스트해보니!

c++ 및 다른 언어들의 경우 아래처럼 빈 문자가 공백 문자가 있는것보다 sort 로 정렬 시 사전순으로 앞선다

근데 자바스크립트는 sort 정렬 시 빈 문자보다 공백 문자가 있는 것이 사전순으로 앞선다!!!

골때리는 자바스크립트다 정말...

그래도 문제에서 숫자로만 출력하면 되므로 정렬 기준을 공백을 제거해서 11은 oneone 으로 바꿔

sort 정렬 해주면 의도한대로 결과가 나온다

대체 자바스크립트 넌 왜그런거냐...

매번 분노를 일으키는 녀석같으니

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

 

1755번: 숫자놀이

79를 영어로 읽되 숫자 단위로 하나씩 읽는다면 "seven nine"이 된다. 80은 마찬가지로 "eight zero"라고 읽는다. 79는 80보다 작지만, 영어로 숫자 하나씩 읽는다면 "eight zero"가 "seven nine"보다 사전순으로

www.acmicpc.net

 

let input;

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

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

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

const solution = (inp) => {
  let [m, n] = inp.split(" ").map((el) => Number(el));
  const alpha = {
    0: "zero",
    1: "one",
    2: "two",
    3: "three",
    4: "four",
    5: "five",
    6: "six",
    7: "seven",
    8: "eight",
    9: "nine",
  };
  let arr = [];
  for (let i = m; i <= n; i++) {
    if (i < 10) {
      arr.push([alpha[i], i]);
    } else {
      let temp = "";
      temp += alpha[Math.floor(i / 10)];
      temp += "";
      temp += alpha[i % 10];
      arr.push([temp, i]);
    }
  }
  arr.sort();
  let ans = [];
  for (el of arr) {
    ans.push(el[1]);
  }
  let answer = "";
  for (let i = 1; i < ans.length; i++) {
    answer += ans[i - 1];
    if (i % 10 === 0) {
      answer += "\n";
    } else {
      answer += " ";
    }
  }
  answer += ans[ans.length - 1];
  console.log(answer);
};

댓글