본문 바로가기

백준/JavaScript

[JS] 백준 입출력과 사칙연산 - 첫 번째 이야기

728x90

 

 

 

 

 

 

... 오늘도 할 일을 마치고 문제를 고르던 어느날...

 

 

 

 

 

 

 

음... 이 문제는 너무 어렵고...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

하핫... 이 문제는 내가 아직 이해를 못 할 것 같군...

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

안되겠다... 익숙하지 않다보니 쉽지가 않다...(학교 프로젝트로 JavaScript 사용했으면 좋았을텐데...)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

이대로 가다간...!!!!

다른 풀이에 의존만해서 혼자서는 JavaScript로 문제를 해결하지 못할거야!!!!

오 노우~~~~!!

 

크흣....!!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

??: 잠깐! 이렇게 해결하면 될거야


(빠바빠바밤~ 빠바빠바밤~ 빠바빠바바라바바바밤)

(~대충 BGM~)

 

??: 나는 고등학생 탐정 남x도일 소꿉친구이면서 같은 ㅂ....(생략)

 

 

 

(잠시후)

 

 

 

??: JavaScript를 처음해서 어렵다고?? 그렇다면 백준 문제 단계별로 풀어보기를 먼저해봐.

 

어? 나도 자바랑 C++ 시작할 때 해본적 있느..ㄴ(싹둑) -> 어이.. 남x도일씨 왜 말을 잘라...

 

??: 입출력과 사칙연산부터 정렬 즉, 12단계까지 풀고 어느정도 익숙해졌다면 (생략)

 

 

??: 아! 참고로 단계별로 풀어보기 다음에 생략된 부분이 궁금하다면 여기서 봐 ㅎㅎ 나도 여기서 참고했으니까.

진실은 언제나 하나!

 

[참고] https://velog.io/@dragoocho/%EB%B0%B1%EC%A4%80-%EC%98%A8%EB%9D%BC%EC%9D%B8-%EC%82%AC%EC%9D%B4%ED%8A%B8%EB%A1%9C-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

 

 

 

 

 

 

 

 

 

그래서 오늘부터 시작될 단계별로 문제 풀이~~!! 입출력과 사칙연산~!

문제

https://www.acmicpc.net/step/1

 

입출력과 사칙연산 단계

입출력과 사칙연산

www.acmicpc.net

 

 

 

 

 

오늘의 첫번째 이야기는~~~~

 

문제 2557번

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

 

2557번: Hello World

Hello World!를 출력하시오.

www.acmicpc.net

 

이럴수가!! 첫번째 문제는 백준 2557번 Hello World이다. 이건... 처음에 JavaScript를 시작할 때 풀었던 문제이다.

그래도.... 새로 다시 시작하는 마음으로 출력해줘야지!!

 

console.log("Hello World!");

 

 

 

ㅎㅎ

 

 

 

그래... 안녕... 또 만나서 반가워

 

 

 

 

문제 1000번

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

 

1000번: A+B

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

www.acmicpc.net

 

이번에는 A + B다. 쉽지~~~ 이거는 자바랑 C++할때도 너무 쉽게 했다.

 

...

 

잠시만... 모르겠다. 뭔가 알 것 같은데 모르겠어.

그래서 한번 찾아보니 변수를 각각 만들어 넣어주는 것은 똑같았다. 입력받은 것을 배열처럼 쓸 수 있나보다. 그리고 JavaScript는 문자열로 받으니까 parseInt 또는 Number을 통해 정수로 바꿔주고 덧셈을 수행하면 된다.

 

[참고] https://velog.io/@yeoni/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%B0%B1%EC%A4%80-1000-javascript

 

 

const fs = require('fs');

// 백준에 제출할 때 써야하는 것
const readFileSyncAdress = '/dev/stdin';

//const readFileSyncAdress = 'input.txt';

let input = fs.readFileSync(readFileSyncAdress).toString().trim().split(' ');

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

console.log(A+B);

 

 

 

 

 

문제 1001번

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

 

1001번: A-B

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

www.acmicpc.net

 

1000번 문제에서 출력해줄때 +를 -로만 바꾸면 성공~!

 

 

 

 

문제 10998번

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

 

10998번: A×B

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

www.acmicpc.net

 

1000번 문제에서 출력해줄때 +를 *로만 바꾸면 성공~!

 

 

 

문제 1008번

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

 

1008번: A/B

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

www.acmicpc.net

 

1000번 문제에서 출력해줄때 +를 /로만 바꾸면 성공~!

 

 

 

 

 

 

문제 10869번

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

 

10869번: 사칙연산

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

www.acmicpc.net

 

... 사실 지금까지 너무 쉬워서 이건 넘어갈까 했는데 안 넘어가고 풀었다.

... 틀렸다. 내 꼼꼼한 성격아 잘했어...

 

왜 그러지???

뭐가 문제야!!!!

 

이러고 보니 나눗셈을 했을 때 몫을 정수만 출력해야하기 때문에 소수점을 없애주어야 한다는 것이었다.

Math.floor()를 사용하여 소수점 이하를 버림하면 될 것 같다.

참고로 Math.ceil()은 소수점 이하를 올림, Math.round()는 소수점 이하를 반올림한다.

[참고] https://tonks.tistory.com/138

 

 

const fs = require('fs');

// 백준에 제출할 때 써야하는 것
const readFileSyncAdress = '/dev/stdin';
//const readFileSyncAdress = 'input.txt';

let input = fs.readFileSync(readFileSyncAdress).toString().trim().split(' ');

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

console.log(A+B);
console.log(A-B);
console.log(A*B);
console.log(Math.floor(A/B));
console.log(A%B);

 

 

 

 

 

이 분은 보니까 이런 식으로 작성하셨다. map이 뭔지 보니까 어떤 배열에 있는 모든 요소들의 값을 변경해서 만든 새로운 배열을 써야 할 때 루프를 사요아여 배열에 대해 수동으로 반복 처리하는 대신 간단히 해주는 함수이다.

const fs = require('fs');
const inputData = fs.readFileSync('/dev/stdin').toString().split(' ').map(Number);

const A = inputData[0];
const B = inputData[1];

console.log(A+B);
console.log(A-B);
console.log(A*B);
console.log(parseInt(A/B));
console.log(A%B);
출처: https://velog.io/@rkio/%EB%B0%B1%EC%A4%80-Javascript-10869

 

[참고] https://www.freecodecamp.org/korean/news/javascript-map-method/

 

 

 

 

으... 졸려 여기까지만 하자...

 

 

 

 

마지막으로 var, let, const 차이를 설명하고 끝내겠다.

- var
var 선언은 전역 범위 혹은 함수 범위로 지정
var 변수는 재선언되고, 업데이트 가능
만약 코드의 다른 부분에서 해당 변수를 사용한 적이 있다면 많은 버그를 발생시킬 수 있기 때문에 let과 const가 필요

- let
블록은 {}로 바인딩된 코드 청크인데, let 선언은 해당 블록 내에서만 사용 가능
let은 업데이트될 수 있지만, 재선언은 불가

- const 
const로 선언된 변수는 일정한 상수 값 유지
let 선언처럼 const 선언도 선언된 블록 범위 내에서만 접근 가능
const는 업데이트도, 재선언도 불가 

 

[참고] https://www.freecodecamp.org/korean/news/var-let-constyi-caijeomeun/  

 

 

 

 

 

 

그럼 모두들 새해 복 많이 받으세요~~~!!

 

해돋이 모습이에요... 모두들 소원 빌어요(해 맞습니다...)

728x90