문제
(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
'Algorithm > - JavaScript' 카테고리의 다른 글
백준 1330번 - 두 수 비교하기 [Node.js] (0) | 2022.05.31 |
---|---|
백준 9498번 - 시험 성적 [Node.js] (0) | 2022.05.31 |
백준 2588번 - 곱셈 [Node.js] (0) | 2022.05.28 |
백준 입출력과 사칙연산 3 - [Node.js] (0) | 2022.05.24 |
백준 입출력과 사칙연산 2 - [Node.js] (0) | 2022.05.23 |
백준 입출력과 사칙연산 1 - [Node.js] (0) | 2022.05.22 |
댓글