반응형
Link
문제
(A+B)%C는 ((A%C) + (B%C))%C 와 같을까?
(A×B)%C는 ((A%C) × (B%C))%C 와 같을까?
세 수 A, B, C가 주어졌을 때, 위의 네 가지 값을 구하는 프로그램을 작성하시오.
입력 > 첫째 줄에 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 = (
process.platform === "linux"
? fs.readFileSync("/dev/stdin").toString()
: `5 8 4`
)
.split(" ")
.map(Number);
const [A, B, C] = input;
console.log((A + B) % C);
console.log(((A % C) + (B % C)) % C);
console.log((A * B) % C);
console.log(((A % C) * (B % C)) % C);
- 10926, 18108번과 다르게 이 문제의 입력 예제 사이에는 공백이 있으므로 trim이 아닌 split을 사용해준다.
개념
구조 분해 할당(Destructuring assignment)
- 배열이나 객체의 속성을 분리해서 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식
let a, b, rest;
[a, b] = [10, 20];
console.log(a, b); // 10 20
[a, b, ...rest] = [10, 20, 30, 40, 50];
console.log(`a={$a}, b={$b}, rest={$rest}`); // a=10, b=20, rest=[30, 40, 50]
// 배열 분해하기
// y에 x[0], z에 x[1]을 할당
// 배열 요소를 변수에 직접 할당하는 것보다 코드 양이 줄어든다.
// const y = x[0];
// const z = x[1];
const x = [1, 2, 3, 4, 5];
const [y, z] = x;
console.log(y, z); // 1 2
map()
- map이 주어진 함수(callbackFunc)를 배열의 각 요소에 대해 한번씩 순서대로 불러 함수의 반환 값을 모아 새로운 배열을 만든다.
arr.map(callbackFunc(currentValue, index, array)[, thisArg])
- callbackFunc으로 새로운 배열 요소를 생성하는 함수를 작성한다.
- currentValue : 현채 처리할 요소
- index (optional) : currentValue의 인덱스
- array (optional) : map()을 호출한 배열
- thisArg (optional) : callback을 실행할 때 this로 사용되는 값
const stringArr = ['1', '2', '3'];
const numArr = stringArr.map(function(element) {
return parseInt(element, 10);
}
console.log(numArr); // [1, 2, 3]
- 기본 표현식 외에 더 간단하게 표현할 수 있는 방법
- 화살표 함수(Arrow Functio) 사용
stringArr.map(element => parseInt(element));
- Number 사용
단, Number는 parseInt와는 다르게 float나 지수 표현도 반환한다.stringArr.map(Number);
['1.1', '2.2e2', '3e300'].map(Number); // [1.1, 220, 3e+300]
- 화살표 함수(Arrow Functio) 사용
Comment
처음에는 구조 분해 할당으로 분해하지 않고 input[0], input[1], ... 의 형태로 작성해서 제출했다.
그러다 보니 코드 작성에 번거로움이 느껴졌고 찾아보니 구조 분해 할당을 사용해서 간단하게 변수에 값을 할당할 수 있었다.
아는 것이 힘이라는 걸 느꼈다..😌
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 1330: 두 수 비교하기 (javascript) (0) | 2022.02.23 |
---|---|
[백준] 2588: 곱셈 (javascript) (0) | 2022.02.08 |
[백준] 18108: 1998년생인 내가 태국에서는 2541년생?! (0) | 2022.02.07 |
[백준] 10926: ??! (javascript) (0) | 2022.02.07 |
[백준] 10869: 사칙연산 (javascript) (0) | 2022.02.04 |