본문 바로가기
Algorithm/- JavaScript

백준 10430번 - 나머지 [Node.js]

by Yoojacha 2022. 5. 26.

문제

(A+B)%C는 ((A%C) + (B%C))%C 와 같을까?

(A×B)%C는 ((A%C) × (B%C))%C 와 같을까?

 

세 수 A, B, C가 주어졌을 때, 위의 네 가지 값을 구하는 프로그램을 작성하시오.


입력

첫째 줄에 A, B, C가 순서대로 주어진다. (2 ≤ A, B, C ≤ 10000)


출력

첫째 줄에 (A+B)%C, 둘째 줄에 ((A%C) + (B%C))%C, 셋째 줄에 (A×B)%C, 넷째 줄에 ((A%C) × (B%C))%C를 출력한다.


예제 입력 1

5 8 4

예제 출력 1

1
1
0
0

소스코드

아래 두 가지 방식 모두 성공할 것이다.

const fs = require('fs');
const sc = fs.readFileSync('/dev/stdin').toString().split(' ').map(value => +value);

const [A, B, C] = sc;

console.log((A+B)%C);
console.log(((A%C) + (B%C))%C);
console.log((A*B)%C);
console.log(((A%C) * (B%C))%C);

 

readFileSync를 이용해 입력 값을 받은 후 하나의 문을 가지고 3개의 변수를 할당하는 방법이 신기했다.

파이썬의 경우 단순히 컴마를 통해 각각의 변수에 넣어 줄 수는 있어도 배열의 각 요소별로 변수를 지정해 줄 수 없었던 것으로 기억하는데 자바스크립트는 되더라!

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

rl.on('line', function(line) {
  input = line.split(' ');

  let A = Number(input[0]);
  let B = Number(input[1]);
  let C = Number(input[2]);

  console.log((A + B) % C);
  console.log(((A % C) + (B % C)) % C);
  console.log((A * B) % C);
  console.log(((A % C) * (B % C3)) % C);

  rl.close();
}).on("close", function() {
  process.exit();
});

readline 모듈은 한 번에 한 줄씩 읽을 수 있는 스트림(process.stdin)에서 데이터를 읽기 위한 인터페이스를 제공한다...

input 변수를 배열로 할당하고 인덱싱해서 let A, B, C 변수에 각각 할당 하는 것은 파이썬과 유사해서 금방 이해가 되었다.

 

하지만 rl.on() // rl.close() // process.exit()에 대한 공부가 더 필요해 보였다. 그리고 자바스크립트의 큰 특징인 함수도 일급 객체로서 rl.on()이나 rl.close() 안의 인수로 사용되는 것은 익숙한 패턴이었으나 이 문들이 어떻게 작동되는지는 공부가 필요하다..


후기

기존에는 require('fs')를 통해 입력값을 받는 방식으로 계속 알고리즘 문제들을 풀었었는데.. 답들을 찾아보던 중 다른 방식이 있어서 같이 가져왔다.

 

두번 째 소스코드에서의 readline 모듈이 가진 여러 기능들이 많아서 나중에 웹을 만든다면 상호 소통을 위해서 분명히 사용할 날이 올 것 같다.. 아직 nodejs 책을 읽지 못해서 대출 문서를 훑기만 했다... 책읽고 다시 기록한 알고리즘 들을 리뉴얼 해야겠다.

 

https://nodejs.org/api/readline.html

 

Readline | Node.js v18.2.0 Documentation

Readline# Source Code: lib/readline.js The node:readline module provides an interface for reading data from a Readable stream (such as process.stdin) one line at a time. To use the promise-based APIs: import * as readline from 'node:readline/promises';cons

nodejs.org

 

 

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

 

10430번: 나머지

첫째 줄에 A, B, C가 순서대로 주어진다. (2 ≤ A, B, C ≤ 10000)

www.acmicpc.net

댓글