31일차 - 2022.03.31

오늘 공부한 내용 요약

Baekjoon에서 문제풀이

1) 문제 : 두 정수 A와 B를 입력받은 후 A+B를 출력하는 프로그램을 작성해보자.

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


고민과정

다른 방법을 고민하다 baekjoon을 처음 시작했을때 자바스크립트 지원이 안되 node.js를 이용하고 fs모듈이라는걸 이용하면 된다고 알게되서 별 생각없이 예시로 있던

const input = require('fs').readFileSync('/dev/stdin').toString().split(' ‘);

를 입력하면 항상 문제없이 자바스크립트처럼 실행될거라 생각하고 진행했었는데 이부분이 문제인가 생각이 들어 어떤 원리이고 왜 넣는지 찾아보았다.

  • Baekjoon에서는 입출력 관리를 해주지 않기에 입출력에 대한 스페이스를 사용자가 지정해야 된다고함.
  • node.js로 값을 입력받기 위한 방법 중 하나가 fs모듈을 이용하는 것인데 직접 입력파일을 읽어와서 처리해준다.
    (컴파일러가 에러나는 경우는 readline방법을 사용)
let fs = require(‘fs’);   

const input=fs.readFileSync('/dev/stdin').toString().trim().split(' ');
-> input을 변수로 선언후 fs모듈을 써서 경로에 있는 파일을 input에 저장. 
split은 문자열을 배열로 만드는 함수이므로 input에 배열로 저장

이 때 trim()은 줄을 띄우는 \n같은 걸 사용시 공백문자만을 가지는걸 방지하기 위해 사용.

문제에서 말하는 입력받는 A와B를 위의 방법으로 input에 배열로 담게됨. input 배열의 값들을 입력받으므로 임의로 1,2번째 항을 input[0] input[1]로 추출.
이제 A와B를 선언 및 할당해 문제 풀이.
이렇게 가져온 input의 값은 문자열 상태이므로 parseInt로 숫자형으로 변환후 A와B는 정수이므로 Math.floor로 소수점 버려줌.


풀이
1.

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');

let A = Math.floor(parseInt(input[0]));
let B = Math.floor(parseInt(input[1]));

if (A>0 && B<10){
    console.log(A+B);
}
let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');

let A = Math.floor(Number(input[0]));
let B = Math.floor(Number(input[1]));

if (A>0 && B<10){
    console.log(A+B);
}

2) 문제 : 두 정수 A와 B를 입력받은 다음, A-B를 출력하는 프로그램을 작성해보자

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

풀이
1.

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');

const A = Math.floor(parseInt(input[0]));
const B = Math.floor(parseInt(input[1]));

if (A > 0 && B < 10) {
    console.log(A - B);
}
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');

const A = Math.floor(Number(input[0]));
const B = Math.floor(Number(input[1]));

if (A > 0 && B < 10) {
    console.log(A - B);
}

위의 문제와 동일하게 풀이


  • A와B의 곱셈을 구하는 문제도 동일.

  • fs모듈에 있는 require는 Node.jS에서 사용되고 있는 CommonJS 키워드인데 다른파일의 코드를 불러오는 기능


3) 문제 : 시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오.

첫째 줄에 시험 점수가 주어진다. 시험 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

풀이
1.

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');

const a = Math.floor(parseInt(input[0]));


if(a >=0 && a<=100) {
if (a >= 90 && a <=100) {
  console.log('A');
} else if (a>=80 && a<=89) {
  console.log('B');
} else if (a>=70 && a<=79) {
  console.log('C');
} else if (a>=60 && a<=69) {
  console.log('D');
} else {
  console.log('F');
}
}

어제 생각한 부분에서 input으로 값 입력하니 해결


4) 문제 : 첫째 줄에 A와 B가 주어지고 A와 B는 공백 한 칸으로 구분되어져 있다.

A가 B보다 큰 경우에는 '>'를 출력한다.
A가 B보다 작은 경우에는 '<'를 출력한다.
A와 B가 같은 경우에는 '=='를 출력한다.
-10,000 ≤ A, B ≤ 10,000 의 제한이 있음

풀이
1.

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split(' ');

const A = Math.floor(Number(input[0]));
const B = Math.floor(Number(input[1]));

if (A >= -10000 && A <= 10000 && B > -10000 && B <= 10000) {
if( A > B ) {
    console.log('>');
} else if (A < B) {
    console.log('<');
} else {
    console.log('==');
}}

  • Math.floor을 제거해도 정답으로 나옴. 코드를 간소화해야 좋은것이라고 알고 있지만 아직 기초배우는 상태이므로 알고있는 상태에서 오류를 예방하는 차원에서 사용함

  • parseInt 대신에 Number을 사용해도 정답으로 나오긴하지만 숫자형을 만드는 좀더 정확한 함수라고 생각되어 parseInt 사용이 나을것으로 보임.

결론 : 각 문제를 처음 접했던 날의 큰 틀과 접근법은 맞았으나 baekjoon에서 자바스크립트를 사용하는데 주의해야할 점을 무시해 계속 오답이 났었음.

내일 학습예정

  • 백준 입출력과 사칙연산 마무리 시도
  • this(3) 마무리 시도
  • 오늘 풀었던 문제들 다른 풀이방식 고민
  • A >= -10000 && A <= 10000 && B > -10000 && B <= 10000
    이거 간소화 할수있는지 고민

하루 돌아보며

결국 순수하게 본인의 힘만으로 풀진 못했지만 고민의 과정을 가지고 답을 보지않고 푼 것에 약간의 만족.
속도가 매우 느렸으므로 더 노력해야함.
기초부분에서 막혔던 걸 풀었으니 그간 해결 못한 문제들 해결 가능할듯
만족도 : ★★☆☆☆

공부 출처

fs모듈
BaekJoon


위의 내용은 공부중 본인이 이해한 내용으로 몇몇 틀린 내용이 있을 수 있습니다.
회독중 발견시 수정하겠습니다

좋은 웹페이지 즐겨찾기