티스토리 뷰

1. Hello World

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

Hello World

문제
Hello World!를 출력하시오.

입력
없음

출력
Hello World!를 출력하시오.

예제 입력 1

예제 출력 1
Hello World!

해답

console.log("Hello World!");

웹 콘솔에 메세지를 출력하는 console.log()을 활용하여 풀 수 있습니다.

2. We love Kriii

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

We love kriii

문제
ACM-ICPC 인터넷 예선, Regional, 그리고 World Finals까지 이미 2회씩 진출해버린 kriii는 미련을 버리지 못하고 왠지 모르게 올해에도 파주 World Finals 준비 캠프에 참여했다.

대회를 뜰 줄 모르는 지박령 kriii를 위해서 격려의 문구를 출력해주자.

입력
본 문제는 입력이 없다.

출력
두 줄에 걸쳐 "강한친구 대한육군"을 한 줄에 한 번씩 출력한다.

예제 입력 1

예제 출력 1
강한친구 대한육군
강한친구 대한육군

해답

for (let i = 0; i <= 1; i++) {
  console.log("강한친구 대한육군");
}

console.log()의 개념을 알면 풀 수 있는 문제입니다.

console.log("강한친구 대한육군")을 두 번 출력하여 문제를 해결할 수 있지만 for문을 활용하여 해결해보았습니다.

3. 고양이

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

고양이

문제
아래 예제와 같이 고양이를 출력하시오.

입력
없음.

출력
고양이를 출력한다.

예제 입력 1

예제 출력 1
\    /\
 )  ( ')
(  /  )
 \(__)|

해답

console.log(`\\    /\\
 )  ( ')
(  /  )
 \\(__)|`);

Template literals 즉 백틱키를 활용하여 출력을 해주는데 특정 문자를 나타내야하므로 이스케이프 시퀀스를 활용하여 코드를 작성합니다.

종류 내용
\n return
\' ' 표시
\" " 표시
\\ \ 표시

4. 개

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

개

문제
아래 예제와 같이 개를 출력하시오.

입력
없음.

출력
개를 출력한다.

예제 입력 1

예제 출력 1
|\_/|
|q p|   /}
( 0 )"""\
|"^"`    |
||_/=\\__|

해답

console.log(`|\\_/|
|q p|   /}
( 0 )\"\"\"\\
|\"^"\`    |
||_/=\\\\__|`);

Template literals 즉 백틱키를 활용하여 출력을 해주는데 특정 문자를 나타내야하므로 이스케이프 시퀀스를 활용하여 코드를 작성합니다.

종류 내용
\n return
\' ' 표시
\" " 표시
\\ \ 표시

5. A+B

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

문제

A+B

문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

입력
첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력
첫째 줄에 A+B를 출력한다.

예제 입력 1
1 2

예제 출력 1
3

해답

const fs = require("fs");

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ")
  .map((value) => +value);

const [a, b] = inputData;

console.log(a + b);

풀이

readFileSync()

const fs = require("fs");

const inputData = fs.readFileSync(
  process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
);

console.log(inputData); // <Buffer 31 20 32>

백준에서 추천하는 방식은 node.js에서 fs 모듈의 readFileSync()를 이용하는 것입니다.

process.platform

백준의 파일 경로는 "/dev/stdin"입니다.

process.platform"linux"인 경우 경로를 "/dev/stdin"으로 향하게 하고 그것이 아니면 사용자가 지정한 파일을 향하게 합니다.

toString()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString();

console.log(inputData); // 1 2

Buffer 형식으로 출력된 값을 toString()을 통해 기본값인 "utf8" 형식으로 출력합니다.

split()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ");

console.log(inputData); // [ '1', '2' ]

split()를 활용하여 매개변수에 공백을 의미하는 " "를 넣어 배열을 만듭니다.

map()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ")
  .map((value) => +value);

console.log(inputData); // [ 1, 2 ]

map() 메서드의 callback 함수를 활용하여 string 형식이었던 배열의 각 값을 number 형식으로 바꿉니다.

배열 구조 분해

const [a, b] = inputData;
console.log(a); // 1
console.log(b); // 2

구조 분해 할당배열 구조 분해을 통해 배열 속의 a, b에 값을 할당합니다.

console.log(a + b); //3

그 후 ab의 값을 더하여 최종적으로 출력값이 요구하는대로 나오는 것을 알 수 있습니다.

6. A-B

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

문제

A-B

문제
두 정수 A와 B를 입력받은 다음, A-B를 출력하는 프로그램을 작성하시오.

입력
첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력
첫째 줄에 A-B를 출력한다.

예제 입력 1
3 2

예제 출력 1
1

해답

const fs = require("fs");

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ")
  .map((value) => +value);

const [a, b] = inputData;

console.log(a - b);

풀이

readFileSync()

const fs = require("fs");

const inputData = fs.readFileSync(
  process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
);

console.log(inputData); // <Buffer 33 20 32>

백준에서 추천하는 방식은 node.js에서 fs 모듈의 readFileSync()를 이용하는 것입니다.

process.platform

백준의 파일 경로는 "/dev/stdin"입니다.

process.platform"linux"인 경우 경로를 "/dev/stdin"으로 향하게 하고 그것이 아니면 사용자가 지정한 파일을 향하게 합니다.

toString()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString();

console.log(inputData); // 3 2

Buffer 형식으로 출력된 값을 toString()을 통해 기본값인 "utf8" 형식으로 출력합니다.

split()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ");

console.log(inputData); // [ '3', '2' ]

split()를 활용하여 매개변수에 공백을 의미하는 " "를 넣어 배열을 만듭니다.

map()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ")
  .map((value) => +value);

console.log(inputData); // [ 3, 2 ]

map() 메서드의 callback 함수를 활용하여 string 형식이었던 배열의 각 값을 number 형식으로 바꿉니다.

배열 구조 분해

const [a, b] = inputData;
console.log(a); // 3
console.log(b); // 2

구조 분해 할당배열 구조 분해을 통해 배열 속의 a, b에 값을 할당합니다.

console.log(a - b); // 1

그 후 ab의 값을 빼 최종적으로 출력값이 요구하는대로 나오는 것을 알 수 있습니다.

7. AxB

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

문제

AxB

문제
두 정수 A와 B를 입력받은 다음, A×B를 출력하는 프로그램을 작성하시오.

입력
첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력
첫째 줄에 A×B를 출력한다.

예제 입력 1
1 2

예제 출력 1
2

예제 입력 2
3 4

예제 출력 2
12

해답

const fs = require("fs");

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ")
  .map((value) => +value);

const [a, b] = inputData;

console.log(a * b);

풀이

readFileSync()

const fs = require("fs");

const inputData = fs.readFileSync(
  process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
);

console.log(inputData); // <Buffer 33 20 34>

백준에서 추천하는 방식은 node.js에서 fs 모듈의 readFileSync()를 이용하는 것입니다.

process.platform

백준의 파일 경로는 "/dev/stdin"입니다.

process.platform"linux"인 경우 경로를 "/dev/stdin"으로 향하게 하고 그것이 아니면 사용자가 지정한 파일을 향하게 합니다.

toString()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString();

console.log(inputData); // 3 4

Buffer 형식으로 출력된 값을 toString()을 통해 기본값인 "utf8" 형식으로 출력합니다.

split()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ");

console.log(inputData); // [ '3', '4' ]

split()를 활용하여 매개변수에 공백을 의미하는 " "를 넣어 배열을 만듭니다.

map()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ")
  .map((value) => +value);

console.log(inputData); // [ 3, 4 ]

map() 메서드의 callback 함수를 활용하여 string 형식이었던 배열의 각 값을 number 형식으로 바꿉니다.

배열 구조 분해

const [a, b] = inputData;
console.log(a); // 3
console.log(b); // 4

구조 분해 할당배열 구조 분해을 통해 배열 속의 a, b에 값을 할당합니다.

console.log(a * b); // 12

그 후 ab의 값을 곱해 최종적으로 출력값이 요구하는대로 나오는 것을 알 수 있습니다.

8. A/B

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

문제

A/B

문제
두 정수 A와 B를 입력받은 다음, A/B를 출력하는 프로그램을 작성하시오.

입력
첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

출력
첫째 줄에 A/B를 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-9 이하이면 정답이다.

예제 입력 1
1 3

예제 출력 1
0.33333333333333333333333333333333

10-9 이하의 오차를 허용한다는 말은 꼭 소수 9번째 자리까지만 출력하라는 뜻이 아니다.

예제 입력 2
4 5

예제 출력 2
0.8

해답

const fs = require("fs");

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ")
  .map((value) => +value);

const [a, b] = inputData;

console.log(a / b);

풀이

readFileSync()

const fs = require("fs");

const inputData = fs.readFileSync(
  process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
);

console.log(inputData); // <Buffer 31 20 33>

백준에서 추천하는 방식은 node.js에서 fs 모듈의 readFileSync()를 이용하는 것입니다.

process.platform

백준의 파일 경로는 "/dev/stdin"입니다.

process.platform"linux"인 경우 경로를 "/dev/stdin"으로 향하게 하고 그것이 아니면 사용자가 지정한 파일을 향하게 합니다.

toString()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString();

console.log(inputData); // 1 3

Buffer 형식으로 출력된 값을 toString()을 통해 기본값인 "utf8" 형식으로 출력합니다.

split()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ");

console.log(inputData); // [ '1', '3' ]

split()를 활용하여 매개변수에 공백을 의미하는 " "를 넣어 배열을 만듭니다.

map()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ")
  .map((value) => +value);

console.log(inputData); // [ 1, 3 ]

map() 메서드의 callback 함수를 활용하여 string 형식이었던 배열의 각 값을 number 형식으로 바꿉니다.

배열 구조 분해

const [a, b] = inputData;
console.log(a); // 1
console.log(b); // 3

구조 분해 할당배열 구조 분해을 통해 배열 속의 a, b에 값을 할당합니다.

console.log(a / b); // 0.3333333333333333

그 후 ab의 값을 나누어 최종적으로 출력값이 요구하는대로 나오는 것을 알 수 있습니다.

9. 사칙연산

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

문제

사칙연산

문제
두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오.

입력
두 자연수 A와 B가 주어진다. (1 ≤ A, B ≤ 10,000)

출력
첫째 줄에 A+B, 둘째 줄에 A-B, 셋째 줄에 A*B, 넷째 줄에 A/B, 다섯째 줄에 A%B를 출력한다.

예제 입력 1
7 3

예제 출력 1
10
4
21
2
1

해답

const fs = require("fs");
const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ")
  .map((value) => +value);

const [a, b] = inputData;

console.log(`${a + b}
${a - b}
${a * b}
${parseInt(a / b)}
${a % b}`);

풀이

readFileSync()

const fs = require("fs");

const inputData = fs.readFileSync(
  process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
);

console.log(inputData); // <Buffer 37 20 33>

백준에서 추천하는 방식은 node.js에서 fs 모듈의 readFileSync()를 이용하는 것입니다.

process.platform

백준의 파일 경로는 "/dev/stdin"입니다.

process.platform"linux"인 경우 경로를 "/dev/stdin"으로 향하게 하고 그것이 아니면 사용자가 지정한 파일을 향하게 합니다.

toString()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString();

console.log(inputData); // 7 3

Buffer 형식으로 출력된 값을 toString()을 통해 기본값인 "utf8" 형식으로 출력합니다.

split()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ");

console.log(inputData); // [ '7', '3' ]

split()를 활용하여 매개변수에 공백을 의미하는 " "를 넣어 배열을 만듭니다.

map()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ")
  .map((value) => +value);

console.log(inputData); // [ 7, 3 ]

map() 메서드의 callback 함수를 활용하여 string 형식이었던 배열의 각 값을 number 형식으로 바꿉니다.

배열 구조 분해

const [a, b] = inputData;
console.log(a); // 7
console.log(b); // 3

구조 분해 할당배열 구조 분해을 통해 배열 속의 a, b에 값을 할당합니다.

Template literals

console.log(`${a + b}
${a - b}
${a * b}
${parseInt(a / b)}
${a % b}`);
// 10
// 4
// 21
// 2
// 1

Template literalsMulti-line stringsExpression interpolation(표현식 삽입법)으로 문제에서 요구한 사칙연산을 간편하게 표현합니다.

parseInt()

a/b에는 parseInt() 함수를 사용하여 실수인 값을 정수로 반환합니다.

최종적으로 출력값이 요구하는대로 나오는 것을 알 수 있습니다.

10. ??!

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

문제

??!

문제
준하는 사이트에 회원가입을 하다가 joonas라는 아이디가 이미 존재하는 것을 보고 놀랐다. 준하는 놀람을 ??!로 표현한다. 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때, 놀람을 표현하는 프로그램을 작성하시오.

입력
첫째 줄에 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어진다. 아이디는 알파벳 소문자로만 이루어져 있으며, 길이는 50자를 넘지 않는다.

출력
첫째 줄에 준하의 놀람을 출력한다. 놀람은 아이디 뒤에 ??!를 붙여서 나타낸다.

예제 입력 1
joonas

예제 출력 1
joonas??!

예제 입력 2
baekjoon

예제 출력 2
baekjoon??!

해답

const fs = require("fs");

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .trim();

console.log(`${inputData}??!`);

풀이

readFileSync()

const fs = require("fs");

const inputData = fs.readFileSync(
  process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
);

console.log(inputData); // <Buffer 62 61 65 6b 6a 6f 6f 6e>

백준에서 추천하는 방식은 node.js에서 fs 모듈의 readFileSync()를 이용하는 것입니다.

process.platform

백준의 파일 경로는 "/dev/stdin"입니다.

process.platform"linux"인 경우 경로를 "/dev/stdin"으로 향하게 하고 그것이 아니면 사용자가 지정한 파일을 향하게 합니다.

toString()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString();

console.log(inputData); // baekjoon

Buffer 형식으로 출력된 값을 toString()을 통해 기본값인 "utf8" 형식으로 출력합니다.

trim()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .trim();

console.log(inputData); // baekjoon

trim() 메서드를 통해 공백 존재 유무를 고려하여 문자열 양 끝 공백을 제거하도록 합니다.

Template literals

console.log(`${inputData}??!`); // baekjoon??!

그 후 Template literalsExpression interpolation(표현식 삽입법)으로 inputData값에 ??!를 이어 적어 출력합니다.

11. 1998년생인 내가 태국에서는 2541년생?!

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

문제

1998년생인 내가 태국에서는 2541년생?!

문제
ICPC Bangkok Regional에 참가하기 위해 수완나품 국제공항에 막 도착한 팀 레드시프트 일행은 눈을 믿을 수 없었다. 공항의 대형 스크린에 올해가 2562년이라고 적혀 있던 것이었다.

불교 국가인 태국은 불멸기원(佛滅紀元), 즉 석가모니가 열반한 해를 기준으로 연도를 세는 불기를 사용한다. 반면, 우리나라는 서기 연도를 사용하고 있다. 불기 연도가 주어질 때 이를 서기 연도로 바꿔 주는 프로그램을 작성하시오.

입력
서기 연도를 알아보고 싶은 불기 연도 y가 주어진다. (1000 ≤ y ≤ 3000)

출력
불기 연도를 서기 연도로 변환한 결과를 출력한다.

예제 입력 1
2541

예제 출력 1
1998

해답

const fs = require("fs");

const inputData = +fs.readFileSync(
  process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
);

console.log(inputData - 543);

풀이

readFileSync()

const fs = require("fs");

const inputData = fs.readFileSync(
  process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
);

console.log(inputData); // <Buffer 32 35 34 31>

백준에서 추천하는 방식은 node.js에서 fs 모듈의 readFileSync()를 이용하는 것입니다.

process.platform

백준의 파일 경로는 "/dev/stdin"입니다.

process.platform"linux"인 경우 경로를 "/dev/stdin"으로 향하게 하고 그것이 아니면 사용자가 지정한 파일을 향하게 합니다.

+

const inputData = +fs.readFileSync(
  process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
);

console.log(inputData); // 2541

Buffer 형식으로 출력된 값을 inputData로 정의하려는 식 앞에 +를 붙여 실수 형식으로 변환하여 불멸기원을 구합니다.

console.log(inputData - 543); // 1998

그리고 543을 뺄셈해 서기 연도를 출력합니다.

12. 나머지

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

문제

나머지

문제
(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 inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ")
  .map((value) => +value);

const [A, B, C] = inputData;

console.log(`${(A + B) % C}
${((A % C) + (B % C)) % C}
${(A * B) % C}
${((A % C) * (B % C)) % C}`);

풀이

readFileSync()

const fs = require("fs");

const inputData = fs.readFileSync(
  process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
);

console.log(inputData); // <Buffer 35 20 38 20 34>

백준에서 추천하는 방식은 node.js에서 fs 모듈의 readFileSync()를 이용하는 것입니다.

process.platform

백준의 파일 경로는 "/dev/stdin"입니다.

process.platform"linux"인 경우 경로를 "/dev/stdin"으로 향하게 하고 그것이 아니면 사용자가 지정한 파일을 향하게 합니다.

toString()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString();

console.log(inputData); // 5 8 4

Buffer 형식으로 출력된 값을 toString()을 통해 기본값인 "utf8" 형식으로 출력합니다.

split()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ");

console.log(inputData); // [ '5', '8', '4' ]

split()를 활용하여 매개변수에 공백을 의미하는 " "를 넣어 배열을 만듭니다.

map()

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split(" ")
  .map((value) => +value);

console.log(inputData); // [ 5, 8, 4 ]

map() 메서드의 callback 함수를 활용하여 string 형식이었던 배열의 각 값을 number 형식으로 바꿉니다.

배열 구조 분해

const [A, B, C] = inputData;
console.log(A); // 5
console.log(B); // 8
console.log(C); // 4

구조 분해 할당배열 구조 분해을 통해 배열 속의 A, B, C에 값을 할당합니다.

Template literals

console.log(`${(A + B) % C}
${((A % C) + (B % C)) % C}
${(A * B) % C}
${((A % C) * (B % C)) % C}`);
// 1
// 1
// 0
// 0

Template literalsMulti-line stringsExpression interpolation(표현식 삽입법)을 활용합니다.

최종적으로 출력값이 요구하는대로 나오는 것을 알 수 있습니다.

13. 곱셈

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

문제

곱셈

문제
(세 자리 수) × (세 자리 수)는 다음과 같은 과정을 통하여 이루어진다.

(1)과 (2)위치에 들어갈 세 자리 자연수가 주어질 때 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하시오.

입력
첫째 줄에 (1)의 위치에 들어갈 세 자리 자연수가, 둘째 줄에 (2)의 위치에 들어갈 세자리 자연수가 주어진다.

출력
첫째 줄부터 넷째 줄까지 차례대로 (3), (4), (5), (6)에 들어갈 값을 출력한다.

예제 입력 1
472
385

예제 출력 1
2360
3776
1416
181720

해답

const fs = require("fs");

const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split("\n")
  .map((value) => +value);

const [a, b] = inputData;

const [hundredsB, tensB, unitsB] = String(b)
  .split("")
  .map((value) => +value);

console.log(`${a * unitsB}
${a * tensB}
${a * hundredsB}
${a * b}`);

풀이

inputData

readFileSync()
const fs = require("fs");

const inputData = fs.readFileSync(
  process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
);

console.log(inputData); // <Buffer 34 37 32 0a 33 38 35>

백준에서 추천하는 방식은 node.js에서 fs 모듈의 readFileSync()를 이용하는 것입니다.

process.platform

백준의 파일 경로는 "/dev/stdin"입니다.

process.platform"linux"인 경우 경로를 "/dev/stdin"으로 향하게 하고 그것이 아니면 사용자가 지정한 파일을 향하게 합니다.

toString()
const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString();

console.log(inputData);
// 472
// 385

Buffer 형식으로 출력된 값을 toString()을 통해 기본값인 "utf8" 형식으로 출력합니다.

split()
const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split("\n");

console.log(inputData); // [ '472', '385' ]

split()를 활용하여 매개변수에 줄바꿈을 의미하는 "\n"를 넣어 배열을 만듭니다.

map()
const inputData = fs
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "../../../../index.txt"
  )
  .toString()
  .split("\n")
  .map((value) => +value);

console.log(inputData); // [ 472, 385 ]

map() 메서드의 callback 함수를 활용하여 string 형식이었던 배열의 각 값을 number 형식으로 바꿉니다.

배열 구조 분해
const [a, b] = inputData;
console.log(a); // 472
console.log(b); // 385

구조 분해 할당배열 구조 분해을 통해 배열 속의 a, b에 값을 할당합니다.

hundredsB, tensB, unitsB

(3), (4), (5)의 값을 구하기 위해서는 b값의 백의 자리 수, 십의 자리 수, 일의 자리 수를 구하여 a값에 각각 곱해줘야 합니다.

String()
const B = String(b);
console.log(B); // 385

number 형식인 b 값을 String()을 통해 문자열로 변환해줍니다.

split()
const B = String(b).split("");
console.log(B); // [ '3', '8', '5' ]

그 후 split() 메서드를 통해 매개변수 ""를 통하여 각 자리 수를 나라태는 배열(백의 자리, 십의 자리, 일의 자리)를 생성합니다.

map()
const B = String(b)
  .split("")
  .map((value) => +value);
console.log(B); // [ 3, 8, 5 ]

map() 메서드의 callback 함수를 활용하여 string 형식이었던 배열의 각 값을 number 형식으로 바꿔 연산이 가능하도록 합니다.

배열 구조 분해
const [hundredsOfB, tensOfB, unitsOfB] = String(b)
  .split("")
  .map((value) => +value);
console.log(hundredsOfB); // 3
console.log(tensOfB); // 8
console.log(unitsOfB); // 5

구조 분해 할당배열 구조 분해을 통해 b로부터 각 자리 수를 의미하는 숫자를 배열 속의 hundredsB, tensB, unitsB에 값을 할당합니다.

Template literals

console.log(`${a * unitsOfB}
${a * tensOfB}
${a * hundredsOfB}
${a * b}`);
// 2360
// 3776
// 1416
// 181720

Template literalsMulti-line stringsExpression interpolation(표현식 삽입법)으로 문제에서 요구한 사칙연산을 간편하게 표현합니다.

문제에서 요구하는 값이 정상적으로 출력되는 것을 볼 수 있습니다.

댓글