약 한 달만에 알고리즘 풀기에 다시 도전!
백준에서 다른 언어가 아닌 JavaScript로 알고리즘을 풀기에는 조금 까다롭다.
일단 JavaScript로 풀려면 node.js를 선택해야 하고,
node.js로 입력값을 불러와서 출력할 수 있도록 정리해야 하기 때문이다.
내가 이전에 막혔던 단계가 이 단계이다. 모듈은 뭐고, 갑자기 split는 왜하고.. 이런 걸 이해하지 못했었는데 JavaScript에 대해 어느 정도 공부하고 나서 유튜버 라매게발자의 가이드를 보니까 유레카! 를 외치는 심정으로 이해가 됐다
알고리즘을 풀면서 중간 과정을 콘솔에 출력하면서 확인하는 것이 좋은데 그럴려면 node.js를 깔아놔야한다!
입력
첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)
출력
첫째 줄에 A+B를 출력한다.
해결방안
- fs모듈을 사용해서 백준 내의 입력값을 가져온다.
- 입력값을 원하는대로 출력할 수 있도록 정제한다.
- a+b를 출력한다.
전체코드
const fs = require('fs');
let input = fs.readFileSync("/dev/stdin").toString().trim().split(" ");
let newArr = [];
for(let i=0; i<=input.length; ++i){
newArr.push(+input[i]);
}
const A = newArr[0];
const B = newArr[1];
console.log(A+B);
코드를 하나씩 자세히 살펴보자!
먼저 백준에서 입력값(예시의 입력값)을 백준 서버에서 불러오는 방법이다.
const fs = require('fs');
let input = fs.readFileSync("/dev/stdin").toString().trim().split(" ");
require('fs');
:: node.js 의 모듈을 사용하는 것이다.
readFileSync()
:: 백준의 서버에 있는 입력값을 받아오는 것이다. 입력값이 있는 주소는 '/dev/stdin' 이다.
toString()
:: 값을 문자열로 변환하는 것.
trim()
:: 문자의 앞 뒤 공백을 없애주는 것.
>redaFileSync 로 파일을 불러올 경우 예상치 못한 공백이 생길 수 있다. 아무리 해도 답이 맞는데 계속 틀린다면 공백을 제거해보자.
split()
:: 문자를 나눠 그 값을 배열을 만들어주는 것이다.
인자로 어떤 것을 기준으로 나눌지 설정할 수 있다.
-('\n'): 줄바꿈을 기준으로 나눔.
-(' '): 공백을 기준으로 나눔.
값을 계산하려면 가져온 입력값을 숫자로 만들어야 한다.
let newArr = [];
for(let i=0; i<=input.length; ++i){
newArr.push(+input[i]);
}
이렇게! 앞에 +가 붙어있으면 JS 에서 알아서 숫자로 변환해서 넣는다. 아니면 Number를 써도 된다! 나는 주로 Number를 쓰는 편.
for문을 사용해서 값을 숫자로 변환할 수도 있지만
이 과정을 쉽게 하는 방법이 있으니!
바로 map 메소드를 사용하는 것!
map을 사용하면 다른 구문 필요없이
const fs = require('fs');
let input = fs.readFileSync("/dev/stdin").toString().trim().split(" ").map(Number);
이렇게 간단하게 사용할 수 있다!
그래서 보통 이렇게 한 줄이 디폴트로 문제풀이에 사용된다. 입력값에 따라 공백이 아니라 줄나눔으로 바꾸거나.. map을 빼거나 trim을 빼거나 하지만 기본 구조는 크게 달라지지 않는다.
하지만 이렇게 처음부터 정리하는 것이 아니라 for문을 사용해보는 경험이 있는 게 좋을 것 같다!
그리고! 처음에 가졌던 또다른 의문점. 왜 [0]을 가져오는가 였다.
Vscode로 연습할 땐 예제의 입력값을 따로 txt 파일로 저장해놔서 불러온다.
그럼 이런 식으로 저장되어 있는데 이 값을 배열로 가져오면 [1, 2]
그래서 예제대로 출력하기 위해 index [0]값을 불러오면 [1]인 것이다!!
그래서
const A = newArr[0];
const B = newArr[1];
console.log(A+B);
예제 값을 가져와서 출력하면 성공!
이걸 풀기 위해 얼마나 ...고생했던지 ㅋㅋㅋㅋㅋ 이 뒤로 사칙연산 파트는 다 같은 유형이라 쉽게(사실 안 쉽게) 풀었다!
'알고리즘 > 백준' 카테고리의 다른 글
[JavaScript] 백준 기본수학2 #11653번 소인수분해 (0) | 2022.07.20 |
---|---|
[JavaScript] 백준 기본수학2 #2581 소수 (0) | 2022.07.20 |
[JavaScript] 백준 기본수학2 #1978번 소수 찾기 (0) | 2022.07.16 |
[JavaScript] 백준 기본수학1 #10757번 큰 수 A+B (0) | 2022.07.16 |
[JavaScript] 백준 입출력과 사칙연산 #10430 나머지 (0) | 2022.07.12 |