목차
1. 배열 만들기.
2. 변수로 제작하기.
3. 데이터 받아올 때 trim 이용하기.
4. 구조 분해 할당
5. splice로 기존의 배열 변경하기.
6. reduce로 배열의 요소에 함수 적용하여 하나의 결과값 반환하기.
1. map(Number)로 배열 만들기
데이터가 띄어쓰기로 여러 개 있는 경우, map(Number)를 이용하여 배열로 만들 수 있다. 배열은 반복문에 유용하다.
2. 변수로 제작하기
뭔가 길어지는 느낌이 나면 변수에 담아서 이용하기. 그렇지 않으면 시간 초과 뜨는 경우가 생길 수도 있다.
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "/input.txt";
let input = fs
.readFileSync(__dirname + filePath)
.toString()
.split("\n");
let num = parseInt(input[0].split(" ")[1]); // 5
let answer = [];
let arr = input[1].split(" ");
for (let i = 0; i < arr.length; i++) {
if (arr[i] < num) {
answer.push(arr[i]);
}
}
// 한 줄에 모두 적으려고 하지 말고 리스트에 담은 후에 join 이용하기.
// 시간 초과 뜬다.
console.log(answer.join(" "));
3. 데이터 1개인 경우 trim 이용하기
- trim : 문자열 양 끝의 공백 제거하고, 원본 문자열을 수정하는 대신에 새로운 문자열을 반환한다.
- 이유는 잘 모르겠는데, trim을 사용하는 것이 좋아보인다. toString() 뒤에 trim 꼭 붙여주기.
나머지 문제를 풀이할 때에 trim은 안 쓰다가 사용하니 정답이 되었다. 꼭 사용해주기.
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "/input.txt";
let input = fs
.readFileSync(__dirname + filePath)
.toString()
.trim()
.split("\n")
.map(Number);
let result = [];
for (let idx = 0; idx < input.length; idx++) {
result.push(input[idx] % 42);
}
let answer = new Set(result);
console.log(answer.size);
4. 구조 분해 할당 - Swap
값을 서로 변경시키는 경우에 유용하다.
[a, b] = [b,a] // 구조 할당 분해
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "/input.txt";
let input = fs
.readFileSync(__dirname + filePath)
.toString()
.split("\n");
let N = Number(input[0].split(" ")[0]);
let M = Number(input[0].split(" ")[1]);
let answer = [];
for (let i = 0; i < N; i++) {
answer.push(i + 1);
}
for (let iter = 0; iter < M; iter++) {
let arr = input[iter + 1].split(" ");
if (arr[0] !== arr[1]) {
// 구조 분해 할당 사용하기. (Swap)
[answer[arr[0] - 1], answer[arr[1] - 1]] = [
answer[arr[1] - 1],
answer[arr[0] - 1],
];
}
}
console.log(answer.join(" "));
5. splice로 기존의 배열 변경하기
문제 해결 방법
1. 역순으로 변경되는 부분 : slice를 이용하여 가져왔다. 하지만 slice로 원본 배열을 변경하기 힘들다는 사실을 알게 되었다.
2. 원본 배열을 변경하는 splice를 이용하여 역순으로 변경된 부분 + 원본 배열 변경을 한 번에 해결하였다.
splice(startIndex, deleteCount, add하는 부분)
3. deleteCount를 세어줄 때 유의하기. 마지막 상자 - 첫 번째 상자 + 1 처리하기.
4. join 이용하여 원하는 모양으로 변경하기.
만약에 slice로 받아서 add하는 부분을 만들 수 있다면 slice와 splice를 같이 사용할 수 있을 것이다.
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "/input.txt";
let input = fs
.readFileSync(__dirname + filePath)
.toString()
.trim()
.split("\n");
let N = Number(input[0].split(" ")[0]);
let M = Number(input[0].split(" ")[1]);
let answer = [];
for (let i = 0; i < N; i++) {
answer.push(i + 1);
}
// 역순으로 만들 바구니 가져오기.
for (let iter = 1; iter <= M; iter++) {
// 역순으로 변경할 인덱스 의미한다.
// a : 첫 번째 바구니 위치
// b : 마지막 바구니 위치
let [a, b] = input[iter].split(" ").map((n) => parseInt(n));
// console.log(`${a} ${b}`);
let arr = [];
for (let j = a - 1; j < b; j++) {
arr.push(answer[j]);
}
arr.reverse(); // 역순으로 변경된 바구니를 의미한다.
// .splice(startIndex, deleteCount, add할 것 (arr 의미한다.))
answer.splice(a - 1, b - a + 1, ...arr);
console.log(answer);
}
console.log(answer.join(" "));
6. reduce로 합계 구하기
js에는 python처럼 집계 함수가 따로 있는 것이 아니라서 reduce 함수를 이용하여 배열의 요소 합계를 구하였다.
// reduce 함수로 합계 구하기.
const arr_sum = new_arr.reduce(function add(init, currValue) {
return init + currValue; // currValue : 배열의 요소를 의미한다.
}, 0); // 초기값 꼭 넣어주기.
reduce는 배열의 각 요소에 reduce 함수를 실행하고, 나중에 하나의 결과값으로 반환한다.
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "/input.txt";
let input = fs
.readFileSync(__dirname + filePath)
.toString()
.trim()
.split("\n");
let N = Number(input[0]);
let arr = input[1].split(" ").map(Number);
// Math.max.apply(null, arr);
let max = Math.max.apply(null, arr);
let new_arr = [];
for (let i = 0; i < arr.length; i++) {
new_arr.push((arr[i] / max) * 100);
}
// reduce 함수로 합계 구하기.
const arr_sum = new_arr.reduce(function add(init, currValue) {
return init + currValue;
}, 0);
console.log(arr_sum / N);
'web > javascript prac with BOJ' 카테고리의 다른 글
[BOJ 1회독] 자바스크립트 문자열 인덱싱 (0) | 2023.04.06 |
---|---|
[BOJ 1회독] 자바스크립트 입출력 및 사칙연산 (0) | 2023.03.26 |
[BOJ 1회독] 자바스크립트 입력 받기 (0) | 2023.03.25 |