choi95 2021. 6. 1. 14:38

문제

N개의 μžμ—°μˆ˜κ°€ μž…λ ₯되면 각 μžμ—°μˆ˜λ₯Ό 뒀집은 ν›„ κ·Έ 뒀집은 μˆ˜κ°€ μ†Œμˆ˜μ΄λ©΄ κ·Έ μ†Œμˆ˜λ₯Ό 좜λ ₯ν•˜κ³ μž ν•œλ‹€. 예λ₯Ό λ“€μ–΄ 32λ₯Ό λ’€μ§‘μœΌλ©΄ 23이고, 23은 μ†Œμˆ˜μ΄λ‹€. 그러면 23을 좜λ ₯ν•œλ‹€.(첫 μžλ¦¬λΆ€ν„°μ˜ μ—°μ†λœ 0은 λ¬΄μ‹œν•œλ‹€)

 

λ¬Έμ œν’€μ΄

λ’€μ§šμ€ μžμ—°μˆ˜λ₯Ό κ΅¬ν•˜κΈ° μœ„ν•΄μ„œ ν•΄λ‹Ή μžμ—°μˆ˜λ₯Ό 10으둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€μ˜ 값을 μ°¨λ‘€λ‘œ μƒˆλ‘œμš΄ 배열에 μ μž¬ν•΄ μ£Όμ—ˆκ³  이λ₯Ό λ°°μ—΄μ˜ ꡬ뢄 μ—°μ‚°μžλ₯Ό 톡해 합쳐 μ€€ λ’€ Number()λ₯Ό μ‚¬μš©ν•˜μ—¬ μžμ—°μˆ˜λ‘œ λ°”κΏ”μ£Όμ—ˆλ‹€.

 

μ†Œμˆ˜λŠ” 1κ³Ό μžμ‹ λ§ŒμœΌλ‘œ λ‚˜λˆ„μ–΄ λ–¨μ–΄μ§€λŠ” μ •μˆ˜μ΄λ‹€.

 

이에 λ°˜λ³΅λ¬Έμ„ 톡해 해당값을 2~(ν•΄λ‹Ήκ°’ - 1)만큼 λ²”μœ„ 내에 μžˆλŠ” κ°’μœΌλ‘œ λ‚˜λˆ„μ–΄ μ‘Œμ„ λ•ŒλŠ” κ·ΈλŒ€λ‘œ λ°˜λ³΅λ¬Έμ„ μ’…λ£Œν•œλ‹€. λ§Œμ•½μ— 반볡문 μ’…λ£Œλœ 이후 인덱슀 i의 값이 ν•΄λ‹Ήκ°’κ³Ό λ˜‘κ°™λ‹€λ©΄, μœ„ λ²”μœ„ λ‚΄μ—μ„œ λ‚˜λˆŒ 수 μžˆλŠ” 값이 μ—†λ‹€λŠ” 의미둜 이 값은 μ†Œμˆ˜λ‘œ νŒλ³„ν•  수 μžˆλ‹€. 

 

μ½”λ“œ

function solution(...arr) {
  let answer = [];

  for (let x of arr) {
    let reverseNum = [];
    let i;

    while (x) {
      reverseNum.push(Math.floor(x % 10));
      x = Math.floor(x / 10);
    }
    let tmp = Number(reverseNum.join(""));

    for(i = 2; i < tmp; i++) {
      if(tmp % i === 0) break;
    }
    if(i === tmp) answer.push(tmp);
  }
  return answer;
}
console.log(solution(32, 55, 62, 20, 250, 370, 200, 30, 100));

 

λ¬Έμ œν’€μ΄2

λ’€μ§šμ€ μžμ—°μˆ˜λ₯Ό κ΅¬ν•˜κΈ° μœ„ν•΄μ„œ 각 μžλ¦Ώμˆ˜κ°€ ν•œμžλ¦¬μ”©λ§ˆλ‹€ 올라갈 λ•Œλ§ˆλ‹€ 각 자리수의 값이 10의 제곱수만큼 μ˜¬λΌκ°€λŠ” μ‹­μ§„λ²•μ˜ νŠΉμ„±μ„ μ΄μš©ν•΄ κ³„μ‚°ν•˜μ˜€λ‹€.

 

μ†Œμˆ˜ νŒλ³„ μ‹œ, κ·Έ λ²”μœ„λ₯Ό ν•΄λ‹Ήκ°’μ˜ μ œκ³±κ·ΌκΉŒμ§€λ§Œ 반볡문 λ‚΄μ—μ„œ νƒμƒ‰ν•˜λ„λ‘ ν•˜μ˜€λ‹€.μ•½μˆ˜λŠ” μ œκ³±κ·Όμ„ 기점으둜 μ•žμ˜ μˆ˜μ™€ λ’€μ˜ μˆ˜κ°€ 바뀐 μ±„λ‘œ 이전과 λ™μΌν•˜κ²Œ 반볡되기 λ•Œλ¬Έμ— 이전에 μ°Έμ‘°ν•œ μ•½μˆ˜μ— λŒ€ν•΄μ„œ ν•œλ²ˆ 더 μ°Έμ‘°ν•΄μ„œ 식별할 ν•„μš”λŠ” μ—†λ‹€.

 

<1 × 16> <2 × 8> <4 × 4> <8 × 2>...

 

μ½”λ“œ

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;
            }
            function solution(arr){
                let answer=[];
                for(let x of arr){
                    let res=0;
                    while(x){
                        let t=x%10;
                        res=res*10+t;
                        x=parseInt(x/10);
                    }
                    if(isPrime(res)) answer.push(res);
                }
                return answer;
            }
            
            let arr=[32, 55, 62, 20, 250, 370, 200, 30, 100];
            console.log(solution(arr));