Lesson 1. 정수 입력
자바스크립트는 readFileSync() 함수를 사용하여 파일에서 데이터를 읽어온다
이를 사용하기 위해서는 맨 위에 const fs = require("fs");를 적어야한다
fs.readFileSync(0)함수로 입력을 받을 수 있게 되지만... ...
>> Hello World
<Buffer 48 65 6c 6c 6f 20 57 6f 72 6c 64>
우리가 알아볼 수 없는 형태로 입력받아지기 때문에
toString() 함수를 사용해서 문자열 type으로 변경해야한다
const fs = require("fs");
let input = fs.readFileSync(0).toString();
console.log(`Input is ${input}`);
입력이 문자열이므로 숫자를 하나 입력받아 1로 더하려고
+1을 하면...
>> 3
31
이라는 놀라운 결과를 얻는다!!!
이럴 때에는 Number()함수를 사용하여 input 변수를 숫자로 변환해줘야한다
const fs = require("fs");
let input = fs.readFileSync(0).toString();
input = Number(input);
console.log(input + 1);
1. require란?
- require는 Node.js에서 사용하는 함수입니다.
- 의미는 "다른 파일이나 모듈(기능 뭉치)을 가져와서 내 코드에서 쓰겠다"는 뜻이에요.
- 지금은 Node.js에 내장되어 있는 "fs" 모듈을 가져오고 있어요.
✏️ 쉽게 말하면:
"fs라는 준비된 도구 세트를 가져와서 쓸게요."
2. "fs" 모듈이란?
- "fs"는 "File System"의 줄임말이에요.
- 파일을 읽거나, 쓰거나, 수정하는 기능을 모아놓은 파일 관련 기능 세트입니다.
✏️ 쉽게 말하면:
"파일을 읽고 쓰는 일을 도와주는 Node.js 기본 도구 세트."
3. readFileSync(0)는 뭐하는 건가요?
- readFileSync는 파일을 읽는 함수입니다.
- Sync는 Synchronous(동기적으로) 읽겠다는 뜻이에요.
→ "코드를 순서대로, 기다렸다가 읽는다"는 의미입니다. - (0)은 파일 이름 대신 0번을 지정했는데,
Node.js에서는 0을 주면 표준 입력(stdin) 을 의미합니다.
→ 즉, 사용자가 입력한 걸 읽겠다는 뜻이에요.
✏️ 쉽게 말하면:
"사용자가 터미널에 입력한 값을 읽어오겠다."
✨ 한 줄로 정리하면
const fs = require("fs");
→ 파일 읽고 쓰는 기능을 준비해요.
let input = fs.readFileSync(0).toString();
→ 터미널에서 입력한 데이터를 문자열로 읽어와요.
🔹 코드 전체 흐름 요약
순서 동작 설명1 | fs 모듈 불러오기 | 파일 읽는 기능 준비 |
2 | 표준 입력에서 데이터 읽기 | 사용자가 터미널에 입력한 값 읽음 |
3 | 입력값을 숫자로 변환 | Number(input) |
4 | 입력값 + 1 출력하기 | console.log(input + 1) |
Lesson 2. 실수 입력
Number() 쓰는 걸 연습한다
복습:
const fs = require("fs");
var a = fs.readFileSync(0).toString();
a = Number(a);
console.log(`${a.toFixed(2)}`);
Lesson 3. 공백을 사이에 두고 입력
공백을 기준으로 나눠서 배열에 저장하게끔 split()을 사용해볼 것이다
let a = fs.readFileSync(0).toString();일 때
let arr = a.split(" ");하면
합쳐서
let arr = fs.readFileSync(0).toString().split(" ");
하고
꼭 let a = Number(arr[0]);으로 해서 숫자로 바꿔주는 과정도 필요하다
Lesson 4. 2개의 줄에 걸쳐 입력
첫번째 줄에 a, 두번째 줄에 b가 있을 경우
다음과 같이 split("\n");을 이용한다
const fs = require("fs");
let arr = fs.readFileSync(0).toString().split("\n");
그렇다면 첫 줄에 문자 2개, 두번째 줄에 1개만 입력받는다면 어떻게 나눌까?
다음과 같은 아이디어를 떠올렸다
const fs = require("fs");
let arr = fs.readFileSync(0).toString().split(" ");
let a = Number(arr[0]);
let arr2 = arr[1].split("\n");
let b = Number(arr2[0]);
let c = Number(arr2[1]);
console.log(a + " " + b + " " + c);
먼저 첫 줄에 2개를 입력받기 때문에 split(" ")을 사용해 첫 줄에 있는 것과 나머지 것들을 입력받는다
그럼 아마 arr의 상태는 arr = ["3", "4\n5"]일 것이다
arr[1]에 2가지가 들어가 있는 상태이므로 split("\n")을 arr[1]에 사용해 숫자들을 분리한다
그리고 그것을 arr2에 넣은 후, b와 c로 나누면 된다
Lesson 5. 문자, 문자열 입력
코드의 안정성을 위해 trim()을 사용하는 법을 배웠다.
공백 문자와 줄바꿈 문자까지 통째로 받는 자바스크립트의 특성상,
입력했을 때 위와 같은 방해물이 있다면 원하는 결과물이 나오지 않을 수도 있다
따라서 trim()을 사용해 양 끝의 공백문자와 줄바꿈 문자를 제거해주는 과정을 배울 것이다
const fs = require("fs");
let input = fs.readFileSync(0).toString().trim();
console.log(input)
궁금증! trim을 썼으면 어떻게 split을 할 수 있을까? ↓
말씀하신 trim()과 split("\n")의 관계를 정확히 이해하시는 건 문자열 처리의 핵심을 잡는 일이에요!
✅ 먼저 코드부터 정리해 볼게요:
const fs = require("fs");
let arr = fs.readFileSync(0).toString().trim().split("\n");
이 코드는
- 입력 전체를 읽어서
- 문자열로 바꾸고
- 양 끝의 공백과 줄바꿈 문자를 제거한 뒤
- 줄바꿈 기준으로 나누는 동작입니다.
🔍 trim()은 어디에 영향을 줄까?
예시 입력:
3 4
5 6
fs.readFileSync(0).toString() 결과는:
"3 4\n5 6\n\n"
여기서 .trim()을 하면:
"3 4\n5 6"
이렇게 문자열의 맨 앞과 맨 뒤에 있는 공백 문자(공백, 탭, 줄바꿈 등)를 제거합니다.
✅ 주의: 중간 줄바꿈(\n)은 제거되지 않아요!
- 즉, 문자열 사이에 있는 \n은 그대로 남습니다.
- split("\n")은 이 중간의 줄바꿈들을 기준으로 배열로 나눌 수 있어요.
💡 그러면 왜 trim()을 쓰는 걸까요?
입력 뒤에 불필요한 빈 줄이 붙을 수도 있으니까, 그걸 제거해서 .split("\n") 했을 때 배열 마지막에 " " 같은 쓰레기값이 안 생기게 하려는 목적이에요!
예:
입력값:
3 4
5 6
- split("\n")만 하면: ["3 4", "5 6", ""] ← 마지막 빈 줄 생김 ❌
- trim().split("\n") 하면: ["3 4", "5 6"] ← 깔끔하게 처리됨 ⭕
✨ 결론 요약
메서드 역할trim() | 문자열 앞뒤의 공백/줄바꿈 제거 (중간은 안 건드림) |
split("\n") | 줄바꿈 기준으로 한 줄씩 잘라서 배열로 만들기 |
그래서 이 두 개는 함께 쓰면:
입력을 깔끔하게 한 줄씩 나눌 수 있는 실전형 패턴이에요! 💡
Lesson 6. 특정 문자를 사이에 두고 입력
:를 사이에 뒀다면 split(":")을 이용, 원소의 수가 3개 이상이더라도 정상적으로 작동한다
'개인공부 > 코드트리 JS' 카테고리의 다른 글
자바스크립트 Chapter 6. 다중반복문 (0) | 2025.05.10 |
---|---|
자바스크립트 Chapter 5. 단순 반복 (0) | 2025.05.10 |
자바스크립트 Chapter 4. 조건문 (0) | 2025.05.06 |
자바스크립트 Chapter 3. 연산자 (0) | 2025.04.29 |
자바스크립트 Chapter 1. 기본 출력 (0) | 2025.03.04 |