문제는 수가 주어지면 뒤집고 소수인지 판별하는 것이었다.
function isPrime(num) {
if (num === 1) return false;
for (let i = 2; i < parseInt(Math.sqrt(num)); i++) {
if (num % i === 0) {
return false;
}
}
return true;
}
let numArray = input[1].split(" ").map(Number);
let answer = [];
for (let i of numArray) {
let num = i;
let result = 0;
while (num) {
let rest = num % 10;
result = result * 10 + rest;
num = Math.floor(num / 10);
}
if (isPrime(result)) {
answer.push(result);
}
}
console.log(answer.join(" "));
플랜 B
let result = 0;
while (num) {
let rest = num % 10;
result = result * 10 + rest;
num = Math.floor(num / 10);
}
//위 식을 대체하여 아래식으로 바꿀 수 있다.
let result = Number(num.split("").reverse().join(""));
답지 로직
let num = Number(input[0]);
let numArray = input[1]
.split(" ")
.map((el) => Number(el.split("").reverse().join("")));
let maxNum = Math.max(...numArray);
let isPrime = new Array(maxNum + 1).fill(true, 2); // fill
for (let i = 2; i * i <= maxNum; i++) {
// if (!isPrime[i]) continue;
for (let j = i * i; j <= maxNum; j += i) {
isPrime[j] = false;
}
}
// 1 2 3 4 5 6 7 8 9 10 <10
//
for (let i of numArray) if (isPrime[i]) console.log(i);
나의 로직
완벽한 나의 패배였다.
에라토스테네스의 체를 사용하여 미리 할당하고 푸는 방식이었고 콘솔로그 여러번 찍는걸로 하였는데 그것보다 한번에 보내는 방식이 더 좋았던 것 같다.
let isNum = input[0].split(" ").map(Number);
let isMoney = isNum[1];
isNum = isNum[0];
let moneyArray = input.slice(1).map((el) => el.split(" ").map(Number));
let count = 0;
for (let i = 0; i < isNum; i++) {
let backUp = moneyArray[i][0];
moneyArray[i][0] = moneyArray[i][0] / 2; //기존 배열은 살려야함
let newArray = [];
for (let j = 0; j < isNum; j++) {
//각각 더할거야
newArray.push(moneyArray[j][0] + moneyArray[j][1]);
}
newArray.sort((a, b) => a - b); //큰순서대로 정렬
let sumResult = 0;
let blockCount = 0;
for (let j = 0; j < isNum; j++) {
// 더해보기
sumResult += newArray[j];
if (sumResult > isMoney) {
break;
}
blockCount++;
}
if (blockCount > count) count = blockCount; // 가장큰 카운트
moneyArray[i][0] = backUp;
}
console.log(count);
답지를 보니 문제점이 있었다. 나는 백업을 하거나 새로운 배열을 만들어서 그 값을 더해주고 count올라간 수를 측정하엿는데 강사님은 백업 없이 돈에서 금액을 빼는 방법으로 계산하였다.
let isNum = input[0].split(" ").map(Number);
let isMoney = isNum[1];
isNum = isNum[0];
let moneyArray = input
.slice(1)
.map((el) => el.split(" ").map(Number))
.sort((a, b) => a[0] + a[1] - (b[0] + b[1]));
let count = 0;
for (let i = 0; i < isNum; i++) {
let moneyResult = isMoney - (moneyArray[i][0] / 2 + moneyArray[i][1]);
let cnt = 1;
for (let j = 0; j < isNum; j++) {
if (i !== j && moneyResult >= moneyArray[j][0] + moneyArray[j][1]) {
moneyResult -= moneyArray[j][0] + moneyArray[j][1];
cnt++;
}
} //같은 경우에도 뺴줄 수 있음
count = Math.max(cnt, count);
}
답지를 보고 다시 해보았다.
sort를 배열값 두개끼리 계산한 경험은 처음이었고,
빼는 방식으로 계산 하는 것도 인상적이었다.
또한 빼쭈는 경우의 수에서 같은 경우도 잘 고려해주어야한다.
이 문제는 아쉬웠던 것이 문제의 의도를 파악하지 못했다.
그래서 강의를 보게되었다.
여기서 배웠던 것은 new Set이라는 것을 처음 써보았다.
이 메소드는 .add로 로 추가할 수 있고 객체를 반환한다.
그래서 중복된 value값을 막을 수 있고
이를 Array.from을 활용해서 배열로 만들어주었다.
const input = require("fs")
.readFileSync("20230324/example5.txt")
.toString()
.trim()
.split("\n");
let num = input[0].split(" ").map(Number);
let numNumber = num[1];
num = num[0];
let numArray = input[1].split(" ").map(Number);
let answer = 0;
let tmp = new Set(); //중복 제거 객체 뱉음
for (let i = 0; i < num; i++) {
for (let j = i + 1; j < num; j++) {
for (let k = j + 1; k < num; k++) {
tmp.add(numArray[i] + numArray[j] + numArray[k]);
}
}
}
let process = Array.from(tmp).sort((a, b) => b - a);
console.log(process[numNumber - 1]); // length 값 -1
// '/dev/stdin'
// [Solved✌🏻]낙준_최대, 최소
// BOJ_10818_N.java
var mySet = new Set();
mySet.add(1); // Set { 1 }
mySet.add(5); // Set { 1, 5 }
mySet.add(5); // Set { 1, 5 }
mySet.add('some text'); // Set { 1, 5, 'some text' }
var o = {a: 1, b: 2};
mySet.add(o);
mySet.add({a: 1, b: 2}); // o와 다른 객체를 참조하므로 괜찮음
mySet.has(1); // true
mySet.has(3); // false, 3은 set에 추가되지 않았음
mySet.has(5); // true
mySet.has(Math.sqrt(25)); // true
mySet.has('Some Text'.toLowerCase()); // true
mySet.has(o); // true
mySet.size; // 5
mySet.delete(5); // set에서 5를 제거함
mySet.has(5); // false, 5가 제거되었음
mySet.size; // 4, 방금 값을 하나 제거했음
console.log(mySet);// Set {1, "some text", Object {a: 1, b: 2}, Object {a: 1, b: 2}}
Set은 add 메소드를 통해 추가할 수 있고 has를 통해 value값을 확인할 수 있다.
size는 들어있는 lenght을 값을 알려주며 delete로 제거할 수 있다.