- ๋ฐฑ์ค ๋จ๊ณ๋ณ๋ก ํ์ด๋ณด๊ธฐ 1 - 12 ๋จ๊ณ(์ต์)
- solved.ac Class 1 - 3
- ์๊ณ ๋ฆฌ์ฆ ๊ธฐ์ด 1/2, 2/2
- ์ ์ถ๋ ฅ๊ณผ ์ฌ์น์ฐ์ฐ
- ์กฐ๊ฑด๋ฌธ
- ๋ฐ๋ณต๋ฌธ
- 1์ฐจ์ ๋ฐฐ์ด
- ํจ์
- ๋ฌธ์์ด
- ๊ธฐ๋ณธ ์ํ 1
- ๊ธฐ๋ณธ ์ํ 2
- ์ฌ๊ท
- ๋ธ๋ฃจํธ ํฌ์ค
- ์ ๋ ฌ
- ์งํฉ๊ณผ ๋งต
- Class 1
- Class 2
- Class 3
- ์๊ณ ๋ฆฌ์ฆ 1
- ์๊ณ ๋ฆฌ์ฆ 2
์๊ฐ ์ด๊ณผ๊ฐ ๋๋ค๋ฉด ๊ฒฐ๊ณผ๊ฐ์ ๊ฐํ๋ฌธ์๋ฅผ ๋ฃ์ด ํ ๋ฒ์ ์ถ๋ ฅํ๊ธฐ
/*๊ณตํต ๋ถ๋ถ
1. fs ๋ชจ๋์ ๊ฐ์ ธ์จ๋ค.
2. ํ๋ซํผ์ด linux๋ฉด '/dev/stdin'์์ ์
๋ ฅ๊ฐ์ ๋ฐ์์ค๊ณ , ์๋๋ผ๋ฉด ํ์ฌ ํด๋์ './input.txt'์์ ์
๋ ฅ๊ฐ์ ๋ฐ์์จ๋ค.
(/dev/stdin ๋ ๋ฐฑ์ค ์ ์ถ ํ ์ฑ์ ์ ์
๋ ฅ๊ฐ ๋ฐ์์ค๋ ๊ฒฝ๋ก)
3. __dirname === ํ์ฌ ์คํ ์ค์ธ ํด๋์ ์ ๋ ๊ฒฝ๋ก
*/
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : __dirname + '/input.txt';
// 1. ํ๋์ ๊ฐ์ ์
๋ ฅ๋ฐ์ ๋
const input = fs.readFileSync(filePath).toString().trim();
// 2. ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ํ ์ค์ ๊ฐ๋ค์ ์
๋ ฅ๋ฐ์ ๋
const input = fs.readFileSync(filePath).toString().trim().split(' ');
// 3. ์ฌ๋ฌ ์ค์ ๊ฐ๋ค์ ์
๋ ฅ๋ฐ์ ๋
const input = fs.readFileSync(filePath).toString().trim().split('\n');
// 4. ์ฒซ ๋ฒ์งธ ์ค์ ์์ฐ์ n์ ์
๋ ฅ๋ฐ๊ณ , ๊ทธ ๋ค์์ค์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ n๊ฐ์ ๊ฐ๋ค์ ์
๋ ฅ๋ฐ์ ๋
const [n, ...arr] = fs.readFileSync(filePath).toString().trim().split(/\s+/);
// 5. ์ฒซ ๋ฒ์งธ ์ค์ ์์ฐ์ n์ ์
๋ ฅ๋ฐ๊ณ , ๊ทธ ๋ค์์ค๋ถํฐ n๊ฐ์ ์ค์ ๊ฑธ์ณ ํ ์ค์ ํ๋์ ๊ฐ์ ์
๋ ฅ๋ฐ์ ๋
const [n, ...arr] = fs.readFileSync(filePath).toString().trim().split('\n');
โ
// 6. ํ๋์ ๊ฐ ๋๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ์ฌ๋ฌ ๊ฐ๋ค์ ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ๋ค์ฃฝ๋ฐ์ฃฝ ์์ฌ์ ์
๋ ฅ๋ฐ์ ๋
// ex) n ์
๋ ฅ - ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ n๊ฐ์ ๊ฐ ์
๋ ฅ - m ์
๋ ฅ - ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ m๊ฐ์ ๊ฐ ์
๋ ฅ
const input = fs.readFileSync(filePath).toString().trim().split(/\s+/);
const n = input[0];
const n_arr = input.slice(1, n+1);
const [m, ...m_arr] = input.slice(n+1);
+) readline ์ผ๋ก ์
๋ ฅ๋ฐ๊ธฐ (์๊ฐ ์ด๊ณผ & ๋ฐํ์ ์๋ฌ ๋ฐ์ ์)
์คํํด ๋ณด๋ ค๋ฉด, ํฐ๋ฏธ๋์์ node [ํ์ผ๊ฒฝ๋ก] ๋ก ์คํ ํ, ํ ์ค์ฉ ์
๋ ฅ
// readline ์ fs ๊ณผ ๋ฌ๋ฆฌ ํ ์ค์ฉ ์
๋ ฅ๋ฐ์ ๋ฐ๋ก ์ฝ๋๋ฅผ ์คํ์ํฌ ์ ์๋ค.
/* ๊ณตํต ๋ถ๋ถ
1. readline ๋ชจ๋์ ๊ฐ์ ธ์จ๋ค.
2. readline ์ธํฐํ์ด์ค ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.(rl)
3. 'readline' ๋ชจ๋์ 'rl' ๊ฐ์ฒด๋ event-driven ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
"line" : ํ ์ค์ด ์
๋ ฅ๋๋ ์ด๋ฒคํธ. ์
๋ ฅ ์คํธ๋ฆผ์ด ์ค ๋ ์
๋ ฅ (\ n, \ r ๋๋ \ r \ n)์ ์์ ํ ๋๋ง๋ค ๋ฐ์.
"close" : close() ํจ์๋ฅผ ํธ์ถ ํ์ ๋ ๋ฐ์ํ๋ ์ด๋ฒคํธ. ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋๋ค. ์ฆ ์
๋ ฅ ๋ฐ๊ธฐ๋ฅผ ์ข
๋ฃํ๋ค.
4. line ์ด๋ฒคํธ ๋ฐ์ ์ ์คํํ ์ฝ๋๋
rl.on("line", function(str){ ...์ด ์์ ๋ฃ๋๋ค... })
-> ํจ์์ ๋งค๊ฐ๋ณ์ str ์ ์ฝ์ด์จ ํ ์ค์ ๋ฌธ์์ด์ด๋ค!
-> ๋ง์ฝ ํ ์ค๋ง ์ฝ๊ณ ๋๋ด๋ ๋๋ค๋ฉด ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์ ์์์ rl.close() ํธ์ถ
5. close ์ด๋ฒคํธ ๋๋ฌ์ ์ ์คํํ ์ฝ๋๋
rl.on("close", function(){ ...์ด ์์ ๋ฃ๋๋ค... })
-> ์ฝ๋ ์์ ์ข
๋ฃ ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์ ์์์ process.exit() ํธ์ถ (ํ์๋ ์๋)
6. rl.on("line", function(){...} ).on("close", function(){...})
์ด๋ ๊ฒ ์ด์ด์ ์ฌ์ฉํด๋ ๋๋ค.
*/
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// 1. ํ์ค ์
๋ ฅ๋ฐ์ ๋
rl.on('line', function(line) {
solution(line); //solution์ ํธ์ถ ํ ํ
rl.close();
}).on("close", function() {
process.exit(); //ํ๋ก์ธ์ค ์ข
๋ฃ
});
// 2. ์ฌ๋ฌ ์ค ์
๋ ฅ๋ฐ์ ๋ (ํ
์คํธ์ผ์ด์ค ๊ฐฏ์๊ฐ ์๋ ๊ฒฝ์ฐ)
let data = [];
rl.on('line', function (line) {
data.push(line);
// data = line.split('').map((el) => el);
// data = line.split(' ').map((el) => el);
// data = line.split('').map((el) => +el);
rl.close();
}).on('close', function () {
solution(data); //solution์ ํธ์ถ ํ ํ
process.exit(); //ํ๋ก์ธ์ค ์ข
๋ฃ
});
// 3. ์ฌ๋ฌ ์ค ์
๋ ฅ๋ฐ์ ๋ (ํ
์คํธ์ผ์ด์ค ๊ฐฏ์๊ฐ ์๋ ๊ฒฝ์ฐ)
let T = null;
let count = 0;
const data = [];
rl.on('line', function (line) {
if (!T) {
// T์ด null์ด๋ฉด
T = +line;
} else {
data.push(line);
count += 1; // data๋ฅผ ์
๋ ฅ๋ฐ์ผ๋ฉด count๋ฅผ ์ฆ๊ฐ์์ผ์ฃผ๊ณ
}
if (count === T) {
// count๊ฐ T์ผ๋ rl.close()๋ฅผ ํธ์ถํด์ค๋ค.
rl.close();
}
}).on('close', function () {
// rl.close()๋ฅผ ํธ์ถํ๋ฉด ์ด ์ฝ๋ฐฑํจ์๋ก ๋ค์ด์ค๊ณ
solution(data); // solution์ ํธ์ถ ํ ํ
process.exit(); // ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํ๋ค.
});
//-> ์ด ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ ๋ฐ์ ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ ๊ฒ
//-> line ์ ๋ฐ์๋ง์ ์ฒ๋ฆฌํด๋ ๋๋ค.