본문 바로가기

백준/JavaScript

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

728x90

 

 

오늘은 좀 일찍 잘 수 있는 날이다 ㅎㅎ

얼른 끝내고 휴식을~~~~!!!

 

 

 

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

 

문제 10926번

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

 

10926번: ??!

준하는 사이트에 회원가입을 하다가 joonas라는 아이디가 이미 존재하는 것을 보고 놀랐다. 준하는 놀람을 ??!로 표현한다. 준하가 가입하려고 하는 사이트에 이미 존재하는 아이디가 주어졌을 때

www.acmicpc.net

 

이 문제는 입력값으로 이미 존재하는 아이디가 주어져서 그 뒤에 ??!를 붙여 출력해줘야 한다. 그러면 입력값을 받은 후 그 뒤에 ??!를 추가해주면 될 것 같다. (그런데... 만약에 이미 존재하는 아이디라고 그 사이트에서 '아이디??!' 이런 식으로 놀라면 당황스러울 것 같다 ㅋㅋㅋ 아니 내가 어떻게 존재하고 있는지 미리 알고 있어...)

 

 

const fs = require('fs');

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

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

console.log(input + '??!');

 

 

좋았어~~~!! input에 입력값을 입력받고 이 뒤에 '??!'를 붙여야 해서 어떻게 붙일까 하다가 다른 언어처럼 +로 이어줬더니 됐다 ㅎㅎ.

 

출력값

 

그래... joonas라고 쳤다. 뭐 왜.

 

 

 

 

문제 18108번

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

 

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

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

www.acmicpc.net

 

아닛!!!! 1998년생인 내가 태국에서는 2541년생?!(1998년생 아)

이것도 그냥 서기 연도로 만들기 위해 입력받은 값에 543을 빼주면 될 것 같다.

const fs = require('fs');

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

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

console.log(input - 543);

 

 

 

 

여기서 잠깐!!

만약 문자열끼리 +로 이어주면 그대로 문자열을 붙여준다.
문자열인 '1'과 2를 더해주면 "12"가 된다(피연산자 중 하나가 문자열이면 다른 하나도 문자열로 변환).
2+2+'1'를 수행해 주면 '221'이 아니라 '41'이 된다.

이항 덧셈 연산자 +는 문자열 연결과 변환이라는 특별한 기능을 제공한다.
다른 산술 연산자가 오직 숫자형의 피연산자만 다루고, 피연산자가 숫자형이 아닌 경우에 그 형을 숫자형으로 바꾸는 것과는 대조적이다.
뺄셈 -연산자는 숫자 6에 문자형 피연산자 '2'를 빼준다면 '2'를 숫자로 바꾼 후 연산이 진행되어 4가 된다.
나눗셈 /연산자는 문자형 '6'에서 문자형 '2'를 나눠준다면 두 피연산자가 숫자로 바뀐 후 연산이 진행되어 3이 된다.

[참고] https://ko.javascript.info/operators

 

 

 

 

 

좋아 좋아~~~ 다음!

 

 

문제 10430번

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

 

10430번: 나머지

첫째 줄에 A, B, C가 순서대로 주어진다. (2 ≤ A, B, C ≤ 10000)

www.acmicpc.net

 

무엇이 무엇이 똑같을까~~~

 

(A+B)% C는 ((A% C) + (B% C))% C와 같을까?

(A×B)% C는 ((A% C) × (B% C))% C와 같을까?

 

비교해 보면 되지!!

const fs = require('fs');

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

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

const A = input[0];
const B = input[1];
const C = input[2];

console.log((A+B)%C);
console.log(((A%C) + (B%C))%C);
console.log((A*B)%C);
console.log(((A%C) * (B%C))%C);

 

 

 

결과는~~ 비밀!

직접 실행해 보세요 ㅎㅎ

 

 

 

 

문제 2588번

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

 

2588번: 곱셈

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

www.acmicpc.net

 

...

뭐지... 나 자바로 어떻게 풀었더라... 두 번째 수의 자리마다 사용하던 거는 기억나는데...

갑자기 생각이 나지 않는다...

그래서 내 제출을 보니...!!!!

생각났다 ㅋㅋㅋ 이렇게 쉬운 문제를!!! 학교에서 많이 했잖아, 정신 차려!!!!

 

자바에서는 이렇게 풀었다. 입력을 받아주고 먼저 첫 번째 수와 두 번째 수를 곱해준 값을 변수에 저장해 둔다. 두 번째 수에 10을 나눈 나머지 즉, 385를 10으로 나눈 나머지인 5를 첫 번째 수에 곱해준다. 그러면 (3)이 나온다. 그다음에 5로는 이미 계산했으니 38만 남기기 위해 10을 나눠서 나온 수를 두 번째 수에 넣어준다. 이를 코드로 작성해 보면 다음과 같다.

 

const fs = require('fs');

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

let input = fs.readFileSync(readFileSyncAdress).toString().trim().split('\n').map(Number);

let A = input[0];
// B는 업데이트가 될 수 있도록 let으로 선언
let B = input[1];
const result = A*B;

for(let i=0;i<3;i++){
    console.log(A*(B%10));
    B=Math.floor(B/10);
}
console.log(result);

 

 

중간에 B를 업데이트해줘야 하니까 업데이트가 되는 var 또는 let을 사용해야겠다.

그리고 for문에서 B를 나눠주면 소수점이 생기기 때문에 Math.floor를 써줘서 소수점 이하를 버리면 될 것 같다.

 

 

여기서 잠깐!
문자열 타입의 숫자를 Number 타입으로 바꿔주는 Number()와 parseInt()의 차이점을 찾았다.
parseInt()는 문자열을 파싱 해서 숫자를 찾는 기능이 있지만, 문자열로 시작하면 이 함수도 찾지 못한다. 그리고 소수점 아래는 출력하지 못한다.
Number()는 숫자를 생성하는 역할을 한다. 소수점도 가능하다.
즉, Number()는 문자가 포함 안 된 숫자(소수점 상관없음)만 있는 문자열이 가능하고, parseInt()는 숫자(소수점 이하는 버림)와 문자열이 포함돼도 숫자가 앞인 문자열이 가능하다.
[참고] https://velog.io/@wiostz98kr/%EB%B0%B1%EC%A4%80-2588%EB%B2%88-%EA%B3%B1%EC%85%88

 

 

 

 

새해 첫날이 이렇게 빨리 지나갔다.

여러분은 즐거운 새해 첫날 보냈나요?? ㅎㅎ

 

모두들 소중한 분들과 함께 해요~~!!

 

 

 

 

 

그럼 저는 이만~~~

내일 또 만나요

 

 

728x90