[구름 goorm] 인공지능 청소기 - JavaScript

문제 출처

Lv.1 구름 인공지능 청소기 - JavaScript

문제 핵심

예약 청소 기능은 로봇 청소기가 자유롭게 주변을 청소하다가 사용자가 설정한 시간과 장소에 정확히 도착하는 기능으로 원하는 시간과 장소의 좌표를 입력하면 다른 장소들을 임의로 청소하다가 정확히 도착 예정 시간에 해당위치에 도착한다. 이 과정에서 동일한 위치를 두 번 이상 지나쳐서 청소할 수 도 있다.

  1. 준우의 집은 2차원 정수 좌표계로 표현할 수 있고 초기 위치는 (0,0)이다.
  2. 로봇 청소기는 1초에 한 번 움직여야만 하며, 상하좌우로 1의 거리를 움직일 수 있다.
  3. 이미 청소하고 지나갔던 칸을 다시 방문해도 괜찮다.
  4. N초의 시간이 정확히 흐른 시점에 로봇 청소기는 (X, Y)에 위치해 있어야 한다.
  • 정확히 N초 후에 로봇 청소기가 (X, Y) 좌표에 도착할 수 있다면 “YES”를 출력한다.
  • 그렇지 않다면 “NO”를 출력한다.
제한 조건
  • 첫째 줄에 테스트케이스의 수를 나타내는 T가 주어진다.
  • 다음 T개의 줄에는 X, Y, N이 공백을 두고 주어진다.
  • 1 <= N <= 10
  • -10^9 <= X, Y <= 10^9
  • 1 <= N <= 2 * 10^9
  • 주어지는 모든 수는 정수이다.
예시

입력
4
-5 -2 7
5 -5 2
0 5 6
1 2 7

출력
YES
NO
NO
YES

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

const input = [];
rl.on("line", function (line) {
  input.push(line);
}).on("close", function () {
  // 문자열 X, Y, N을 split() 메서드를 통해 공백을 분리하고
  // map() 메서드를 통해 숫자로 변환한다.
  const arr = input.slice(1).map((xyn) => xyn.split(" ").map(Number));

  arr.forEach((xyn) => {
    // 구조 분해 할당을 통해 x, y, n을 구한다.
    const [x, y, n] = xyn;

    // x, y를 양수로 만든다음 더해서 총 이동거리를 구한다.
    // 1초에 1칸씩 움직이므로
    const sum = Math.abs(x) + Math.abs(y);

    // 정답을 담을 변수를 선언하고 초기값을 NO로 설정한다.
    let answer = "NO";

    // 총 이동거리가 n보다 작거나 같고
    // 총 이동거리와 n의 차이가 짝수라면 YES를 출력한다.
    // (남은 시간이 짝수여야 같은 곳을 방문해서라도 정답에 도달할 수 있다.)
    if (sum <= n && (sum - n) % 2 === 0) answer = "YES";

    console.log(answer);
  });
});
정리

구름톤 챌린지가 끝나고 구름의 있는 문제들을 풀어보고 있습니다.
다양한 문제들이 있어서 재밌게 풀고 있습니다. 문제를 풀고 풀이를 정리해서 올려두겠습니다!

피드백은 언제나 환영입니다. 😊

사용한 메서드

split() 메서드 - MDN
slice() 메서드 - MDN
map() 메서드 - MDN
구조 분해 할당 - MDN
forEach() 메서드 - MDN