아침부터 최소공배수로 고통받았다. 수학식을 코드로 짜는 건 너무 어려웠다. 어떤 건 풀리고 어떤 건 죽어라 안 풀린다. 그런데 생각하지 못한 간단한 식이 존재했다. 😥
팀원 분께 수학식 코드를 외우는 방법을 추천 받았다. 좋은 방법이라 생각한다. 내일 시험 끝나고 풀었던 수학 문제들 정리해야겠다. 평소에 블로그 한 페이지에 모아 놓을 걸.
효율성 테스트를 통과하지 못했다.
가장 효율이 좋은건 에라토스테네스의 체라고 한다. 이 알고리즘을 적용하기엔 아직 이해가 되질 않아서 내일 시간나면 다시 봐야겠다.
팀원분이 지적해줘서 Math.sqrt()가 루트 구하는 메서드임을 알게되었다. 그리고 나머지가 0이면 소수가 아니다. 왜 입으로는 나눠지면 안되는데 하면서 나머지가 0일때 소수를 구하고 있었지???
그리고 내가 쓴 방식으로 소수를 구하려면 isPrime로 소수인지 아닌지 false, true로 분별해야한다. if안에서 add를 진행하면 i가 소수인지 아닌지 판별을 못하고 다 들어간다.4%3 !== 0
도 들어가고9%2 !==0
도 들어간다.
function solution(n) {
var answer = new Set();
for (let i = 2; i <= n; i++) {
let isPrime = true;
for (let j = 2; j <= parseInt(Math.sqrt(i)); j++) {
if (i % j === 0) {
isPrime = false;
break;
}
}
if (isPrime) {
answer.add(i);
}
}
return answer;
}
이건 손으로 그려도 모르겠네. 문제를 이해하지 못 했나봐. 손으로 써도 5개가 나오는 것 같은데?
그리고 스택이라 생각했는데 다른 글을 읽어보니 스택, 큐, ... 을 썼다고 한다. Why죵...?
다른 사람 풀이도 제법 길더라. 그래서 다시 한번 생각해보기로 했다. 일단 손으로 그려도 틀리니까 문제 이해도가 나쁜 듯 하다.
function solution(board, moves) {
const Arr = [...board]
// console.log(Arr)
let second = []
let third = [];
for(let i = 0;i<board.length;i++){
let first = []
for(let j = 0;j<board.length;j++){
if(board[j][i]!==0){
first.push(board[j][i])
}
}
second.push(first)
}
for(let k = 0; k<moves.length;k++){
const num = Number(moves[k])-1
const idx = second[num].length -1
console.log(second[num][idx])
if(second[num][idx]!==third[k]&&second[num][idx]){
third.push(second[num][idx])
second[num].shift()
}
}
console.log(second)
console.log(third)
// third.toString().replace(/(.)/g,'')
// const result = (moves.length - third.length)*2
return third
}