Algorithm_javascript

백준 입력값(\r 개행문자) 처리 (자바스크립트.node.js)

luminouswy 2023. 5. 20. 13:17
반응형

문제

  • 백준으로 자바스크립트 문제를 풀다보면 입력 값 때문에 제출 시 에는 문제가 없지만 내가 사용하고 있는 pc에서는 제대로 출력이 안 되는 문제가 있다.

예 백준 9086번

const fs = require("fs");
const file = process.platform === "linux" ? "dev/stdin" : "./text.txt";
const input = fs.readFileSync(file).toString().trim().split("\n");

const t = input[0];

for (i = 1; i <= t; i++) {
  let End = input[i].length - 1;
  console.log(input[i].charAt(0) + input[i].charAt(End));
}

출력값

AE
OO
AB

내 pc에서 출력 값

A
O
AB

  • 이것을 제출하면 위에 출력 값처럼 계산되어 정답 처리 되지만 현재 테스트하고 있는 pc에서는 위와 같이 잘못 출력이 된다.
  • 이 문제의 원인은 input을 콘솔창으로 출력했을 경우 아래와 같이 나온다.

[ '3\r', 'ACDKJFOWIEGHE\r', 'O\r', 'AB' ]

  • 여기서 보이는 \r(개행문자) 때문에 input[i].length가 테스트 pc에서 길이가 하나씩 늘어나서 나오기 때문에 제대로 출력이 안 되는 문제가 발생하였다.

해결 방법

  • 해결 방법은 input[i].trim()을 사용하면 공백을 제거하기 때문에 위 길이가 늘어나는 것을 방지할 수 있다.
const fs = require("fs");
const file = process.platform === "linux" ? "dev/stdin" : "./text.txt";
const input = fs.readFileSync(file).toString().trim().split("\n");

const t = input[0];

for (i = 1; i <= t; i++) {
  //  \r 개행문자 때문에 length가 하나 늘어나는 것 방지(문제 제출시에는 상관 없음)
  let str = input[i].trim();

  let End = str.length - 1;

  // console.log(input[i].substring(0,1) + input[i].substring(End, input[i].length))
  console.log(input[i].charAt(0) + input[i].charAt(End));
}