32일차 - 2022.04.01

안병욱·2022년 4월 1일
0

오늘 공부한 내용 요약

Baekjoon에서 문제풀이

1) 문제 : 두 자연수 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를 출력한다.

고민과정
앞의 문제들과 다른 고민점은 여러줄에 나눠 출력하는 것인데

  console.log('A+B\nA-B\nA*B\nA/B\nA%B');

위와 같이 하려고보니 각 값들이 계산된후 줄이 나뉘는것이 아니라
A+B와 A-B문자 그대로 줄이 바꿔 출력되는 방법이라 고민해보았는데
`${}`가 기억나 적용 -> 그러나 오답.
맞는것 같은데 고쳐보고 고민해보다가 A/B에서 굳이 몫이라고 써놓은게 보여 몫은 소수점이 없으므로 Math.floor을 적용해봄.

풀이
1.

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

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

if (A >= 1 && A <=10000 && B >=1 && B <=10000){
   console.log(`${A+B}\n${A-B}\n${A*B}\n${C}\n${A%B}`);
}
  1. 이 문제에서도 A,B선언시 Math.floor을 빼거나 parseInt를 Number로 바꿔도 맞는 답임

  2. 미리 A와B의 계산을 나타내는 변수를 선언해놓고 호출하기

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

let a = A + B;
let b = A - B;
let c = A * B;
let d = Math.floor(A/B);
let e = A % B;

if (A >= 1 && A <=10000 && B >=1 && B <=10000){
   console.log(`${a}\n${b}\n${c}\n${d}\n${e}`);
}       

2) 문제 : 첫째 줄에 A, B, C가 순서대로 주어진다. (2 ≤ A, B, C ≤ 10000)
첫째 줄에 (A+B)%C, 둘째 줄에 ((A%C) + (B%C))%C, 셋째 줄에 (A×B)%C, 넷째 줄에 ((A%C) × (B%C))%C를 출력한다.


풀이

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

let A = parseInt(input[0]);
let B = parseInt(input[1]);
let C = parseInt(input[2]);

if (A>=2 && B>=2 && C>=2 && A<=10000 && B<=10000 && C<=10000) {
    console.log(`${(A+B)%C}\n${((A%C)+(B%C))%C}\n${(A*B)%C}\n${((A%C)*(B%C))%C}`);
}

이 문제에는 주어지는 값이 자연수, 정수라는 말 없으므로 Math.floor 제거했음

  1. 1번 문제와 같이 ${}에 넣을 값을 미리 선언해두고 호출해도 가능
let A = parseInt(input[0]);
let B = parseInt(input[1]);
let C = parseInt(input[2]);

let a = (A+B)%C;
let b = ((A%C)+(B%C))%C;
let c = (A*B)%C;
let d = ((A%C)*(B%C))%C;

if (A>=2 && B>=2 && C>=2 && A<=10000 && B<=10000 && C<=10000) {
    console.log(`${a}\n${b}\n${c}\n${d}`);
}

3) 문제 : 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때, 놀람을 표현하는 프로그램을 작성하시오.
첫째 줄에 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어진다. 아이디는 알파벳 소문자로만 이루어져 있으며, 길이는 50자를 넘지 않는다.
첫째 줄에 준하의 놀람을 출력한다. 놀람은 아이디 뒤에 ??!를 붙여서 나타낸다.


고민과정
소문자로만 이루어지게 하는건 toLowerCase()이용 /
길이 50이하는 length이용 / ??!붙이는건 `${}`를 이용하면 될 것 같음

let id = input[0].toLowerCase();

if (id.length < 50 ) {
    console.log(`${id}??!`);
}

로 시도하였으나 오답.
또 지레짐작하여 문제를 제대로 보지않음. 문제에 소문자로 바꾸고 길이 50이하로 만들라는 내용이 아니라 이미 존재하는 아이디가 그렇다는 내용이 써있을뿐이였음. 바로 ??!를 붙여주는 문제였음...


풀이
1.

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

    console.log(`${input}??!`);
let a = "??!";
console.log(input + a);

4) 문제 : 불기 연도가 주어질 때 이를 서기 연도로 바꿔 주는 프로그램을 작성하시오. 서기 연도를 알아보고 싶은 불기 연도 y가 주어진다.
(1000 ≤ y ≤ 3000)


풀이
1.

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

let y = Math.floor(parseInt(input[0]));

if (y>=1000 && y <=3000) {
    console.log(y-543);
}
  1. 동일하게 Math.floor을 빼거나 / parseInt대신에 Number 가능

  2. 543을 빼주는 걸 선언하고 호출

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

let y = Math.floor(parseInt(input[0]));
let a = y-543;

if (y>=1000 && y <=3000) {
    console.log(a);
}

내일 학습예정

  • this 마무리
  • baekjoon 조건문

하루 돌아보며

오늘 접한 문제들은 크게 고민을 요하진 않았으나 다른 방식으로 풀이방법을 아직 발견하지 못함.
this 뒷부분을 이해해보고 깊게 이해하기 시도하였으나 부족. 내일 추가 보완
만족도 : ★★☆☆☆

공부 출처

BaekJoon
코어 자바스크립트 -정재남- 지음


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

profile
working hard

0개의 댓글

관련 채용 정보