ν°μ€ν 리 λ·°
[JS] μ½μλ‘ κ° μ λ ₯ λ°κΈ°, readline λͺ¨λ
BlueHorn07 2020. 6. 28. 20:57(λκΈ°) node.js λ°°μ΄ κ±°λ₯Ό μ’ μ°μ΅νλ λͺ©μ μμ λ°±μ€ λ¬Έμ λ₯Ό νμ΄λ³΄λ €κ³ νλ€. κ·Έλ°λ° console μΆλ ₯λ§ ν μ€ μμ§ console μ λ ₯μ λν΄μλ λ³λλ‘ λ°°μ΄κ² μλ€λ μ¬μ€μ κΉ¨λ¬μ λ²λ Έλ€!! γ γ γ γ γ
κ·Έλμ μ΄λ² κΈ°νμ console μ λ ₯μ λν΄μ μ 리ν΄λ³Έλ€.
μΈν°λ·μ λͺκ°μ§ λ°©λ²μ΄ μ μλμ΄ μλλ°, λ΄ κΈ°μ€μΌλ‘ κ·Έλλ§ μ’ μ¬μ보μ΄λ λ°©λ²μ μ μν΄λ³΄λ €κ³ νλ€.
μ°λ¦¬λ JSμ λ΄μ₯ λͺ¨λμΈ 'readline' λͺ¨λμ μ¬μ©ν κ²μ΄λ€.
μ²μμλ μλμ κ°μ₯ κΈ°λ³Έμ΄ λλ μ½λλ₯Ό μμ±νλ€.
const readline = require('readline');
// μΈν°νμ΄μ€ κ°μ²΄λ₯Ό λ§λ€μ.
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
μ΄νμλ μν©μ λ°λΌμ μ½λμ λ΄μ©μ΄λ λν μΌμ΄ λ¬λΌμ§λ€.
κ·Έλμ λ³ΈμΈμ΄ μ΄λ€ μ λ ₯κ°μ λ°λμ§μ λ°λΌμ μ½λμ λ΄μ©μ΄ λ¬λΌμ§ μ μλ€.
- μ μ νλ μ λ ₯ λ°κΈ° (1ν)
- 무νν μ λ ₯ λ°κΈ°
- μ μ λ κ° μ λ ₯ λ°κΈ° (1ν)
- λ°°μ΄μ ν¬κΈ° Nμ μ λ ₯ λ°κ³ , Nκ° μ μ μ λ ₯ λ°κΈ°
μ¬λ¬λΆμ΄ μ²μ λΆλΆμ λ°μ΄λμ μλ μμΌλ 미리 λ§ν΄λμλ©΄, 'readline' λͺ¨λμ 'rl' κ°μ²΄λ event-driven λ°©μμΌλ‘ λμνλ€. event-drivenμ λν΄μλ λ³λλ‘ μ€μ νμ§λ μκ² λ€.
"line"μ ν μ€μ΄ μ λ ₯λλ μ΄λ²€νΈμ΄κ³ , "close"λ EOF λλ μ§μ close() ν¨μλ₯Ό νΈμΆ νμ λ λ°μνλ μ΄λ²€νΈμ΄λ€.
'readline' λͺ¨λμ μ μ°λ €λ©΄, μ΄λ€ μ΄λ²€νΈλ€μ΄ μλμ§ μ μκ³ μλ κ²μ΄ μ’κ² μ§λ§, κ°μ₯ κΈ°λ³Έμ΄ λλ κ²μ "line"μ "close"μ΄λ€.
1. μ μ νλ μ λ ₯ λ°κΈ°(1ν)
let N; // μ μλ₯Ό μ μ₯ν λ³μ
rl.on("line", function(line){
console.log(`print input string ${line}`);
N = Number(line);
console.log(`print input number ${N}`);
rl.close();
})
λ§ κ·Έλλ‘ μ μ νλλ₯Ό μ λ ₯ λ°μμ κ·Έλλ‘ μΆλ ₯νλ μ½λλ€.
λ§μ§λ§μ rl.close()κ° μλ€λ μ μ μ£Όλͺ©νμ. μ΄ νμ€μ΄ μ λ ₯μ 무νν λ°λμ§ μλμ§λ₯Ό κ²°μ νλ€.
2. 무νν μ λ ₯ λ°κΈ°
let N; // μ μλ₯Ό μ μ₯ν λ³μ
rl.on("line", function(line){
console.log(`print input string ${line}`);
N = Number(line);
console.log(`print input number ${N}`);
})
μ μ νλλ₯Ό μ λ ₯νκ³ μν°λ₯Ό μ³€λλΌλ νλ‘κ·Έλ¨μ΄ κ³μν΄μ μ λ ₯μ κΈ°λ€λ¦°λ€.(λλ μ λ ₯μ λ°μ μ μλλ‘ μ μ§νλ€.)
close() ν¨μλ rl κ°μ²΄μ "close" μ΄λ²€νΈλ₯Ό μ£Όλ λ§νΌ μμ£Ό μ€μν ν¨μμ΄λ€.
3. μ μ 2κ° μ λ ₯λ°κΈ°(1ν)
let input = []
rl.on("line", function(line){
input = line.split(' ').map((el) => parseInt(el));
rl.close();
})
rl.on("close", function(){
let A = input[0];
let B = input[1];
console.log(A+B);
})
λ°±μ€ 1000λ² A+Bλ₯Ό ν΄κ²°ν μ μλ μ½λλ₯Ό μ΄ν΄λ³΄μ.
λ μ μκ° κ³΅λ°±μ κΈ°μ€μΌλ‘ μ λ ₯λκΈ° λλ¬Έμ, split(' ') λΆλΆμ λ£μ΄μ€¬λ€.
κ·Έλ¦¬κ³ μ λ ₯λ μ μλ₯Ό λ°λ‘ Int νμΌλ‘ λ³ννκΈ° μν΄μ parseInt(el) λΆλΆμ λ£μ΄μ€¬λ€.
map(...)μ 리μ€νΈ μλ£νμΈ line.split(' ')μ κ° μμμ μ½λ°± ν¨μλ₯Ό μ μ©ν΄μ£Όλ μν μ νλ€.
μ΄νμ κΈ°λ₯μ λͺ¨λ rl.on("close", ....)μμ μ²λ¦¬κ° λλ€.
μ°Έκ³ λ‘ λ³ΈμΈμ μ²μμ μλμ μ½λλ₯Ό ꡬμ±νμλ€.
let input = []
rl.on("line", function(line){
input = line.split(' ').map((el) => parseInt(el));
rl.close();
})
let A = input[0];
let B = input[1];
console.log(A+B);
νμ§λ§, λ¬Έμ λ μ΄λ κ² μ½λλ₯Ό ꡬμ±νλ©΄, A, Bμ μ μ ν κ°μ΄ λ€μ΄κ°μ§ μκΈ° λλ¬Έμ NaNμ μΆλ ₯νκ² λλ€.
λΉλ¨ console.log(A+B) λ§κ³ , κ·Έλ₯ console.log("test")λ‘ μΆλ ₯μ ν΄λ΄λ, rl.on("line", ...) μ΄μ μ μ½μ μΆλ ₯μ΄ λλ κ²μ μ μ μλ€.
μ΄λ° μΌμ΄ μΌμ΄λλ μ΄μ λ κΈμ μμμ μ μνμλ―μ΄ rl κ°μ²΄κ° event-driven λ°©μμΌλ‘ μλνκΈ° λλ¬Έμ΄λ€!!
κ·Έλμ μ°λ¦¬κ° μ λ ₯μ λ°κ³ rl.close()λ₯Ό νΈμΆνμ¬ μ λ ₯μ΄ λλ¬λ€λ κ²μ μλ €μ€μΌ νλ€.
4. λ°°μ΄μ ν¬κΈ° Nμ μ λ ₯ λ°κ³ , Nκ° μ μ μ λ ₯ λ°κΈ°
λ°±μ€ 10818λ² μ΅μ, μ΅λ λ¬Έμ μ μ λ ₯μ node.jsλ‘ μ΄λ»κ² λ°μ μ μλμ§ μ΄ν΄λ³΄μ.
λ¨Όμ μ λ ₯μ μλμ κ°λ€.
5
20 10 35 30 7
μ, μ΄μ node.js μ½λλ₯Ό μ΄ν΄λ³΄μ.
let N;
let count = 0; // λͺλ²μ§Έ λΌμΈμ μ
λ ₯ λ°λμ§λ₯Ό μ μ₯νλ λ³μ
rl.on("line", function(line){
if(count == 0)
N = Number(line.trim());
else if(count == 1){
get_Min_Max(line.trim());
rl.close();
}
count++;
})
function get_Min_Max(input){
let arr = input.split(' ').map((num) => parseInt(num));
console.log(arr); // ν
μ€νΈμ©
// min, maxλ₯Ό μΆλ ₯μ μ€μ€λ‘ ν΄λ³΄μκΈ° λ°λλλ€.
}
κ°λ¨ν νΈλ¦μ μ΄μ©ν΄μ νμ€ νμ€ μ λ ₯λ λλ§λ€ λ€λ₯Έ μμ μ μννλλ‘ μ½λλ₯Ό ꡬμ±νμμ΅λλ€.
μ°λ¦¬κ° λ§€λ² μ λ ₯μ λ°μ λ, μ°λ¦¬λ νμ λ¨ νλμ rl.on("line", ...)λ₯Ό κ°μ§κ³ , κ·Έκ³³μ κΈ°λ‘λ λ΄μ©μ μνν μ λ°μ μμ΅λλ€. μ¦, μλμ κ°μ μ½λλ μ°λ¦¬μ λͺ©μ μ λΆν©νμ§ μλλ€λ κ±°μ£ .
/* μλͺ»λ μ¬μ©μ 1 */
rl.on("line", function(line){
N = Number(line.trim());
})
rl.on("line", function(line){
get_Min_Max(line.trim());
rl.close();
})
/* μλͺ»λ μ¬μ©μ 2 */
rl.on("line", function(line){
N = Number(line.trim());
rl.on("line", function(line){
get_Min_Max(line.trim());
rl.close();
})
})
κ·Έλμ μ λ μμ νμ¬ λͺλ²μ§Έ μ€μ μ λ ₯μ λ°λμ§λ₯Ό κΈ°λ‘νμ¬ n-th λΌμΈμ μ λ ₯ λλ§λ€ λ€λ₯Έ μμ μ μννλλ‘ μ½λλ₯Ό ꡬμ±νμμ΅λλ€.
μ΄λΆμ λΈλ‘κ·Έ κΈμ 보면, μ μ λΉμ·ν λ°©μμΌλ‘ rl.on("line", ...)λ₯Ό μ¬μ©νκ³ κ³μλλ€.
λ€λ§, λ€λ₯Έ μ μ μ΄λΆμ rl.on("line", ...)μ μ λ ₯μ λͺ¨λ λ°μ νμ, rl.on("close", ...) ν¨μμμ μμ μ μ²λ¦¬νλ€λ κ±°μ£ .
μ΄λ λ°©λ²μ΄ λ μ’μμ§λ μ λ μ λͺ¨λ₯΄κ² μ΅λλ€. (μ λ μμ§ node.js PSλ₯Ό λ§μ΄ μ ν΄λ΄μμ)
κ·Έλλ C/C++, python λ¬Έλ²μ μ΅μν μ λ μ λ ₯μ λͺ¨λ λ°κ³ , μμ μ μ²λ¦¬νλ κ²λ³΄λ€ μ λ ₯μ νμ€νμ€ λ°μ λ μ²λ¦¬νλ κ²μ΄ λ μ΅μνκΈ° λλ¬Έμ μμ κ°μ λ°©μμΌλ‘ μ½λλ₯Ό ꡬμ±ν΄μ PSλ₯Ό νκ³ μμ΅λλ€.
νΉμ λ μ’μ μ½λκ° μλ€λ©΄, μ μν΄μ£ΌμΈμ!!
ν¨κ» λ°°μμλ€ γ γ