본문 바로가기
문제풀이/인프런 알고리즘 문제풀이

4-2 뒤집은 소수

by dev_kong 2021. 12. 14.
728x90
728x90

숫자들이 담긴 배열이 입력되면

각 숫자들을 뒤집고,

뒤집은 숫자가 소수인지 확인한 후

소수이면 출력한다.

단 예를 들어 200 뒤집어서 002 가 되는 경우

2로 출력한다.

 

const arr = [32, 55, 62, 20, 250, 370, 200, 30, 100];
console.log(solution(arr));

예제를 보면 이해가 쉽다

32를 뒤집어서 23 

23은 소수이므로

23 출력

 

이 예제가 입력되면 출력되는 수는

23, 2, 73, 2, 3 이다.

 

function solution(arr) {
  const answer = [];

  for (const num of arr) {
    let cnt = 0;
    const changedNum = Number(num.toString().split('').reverse().join(''));

    for (let i = 2; i < Math.ceil(Math.sqrt(changedNum)); i++) {
      if (changedNum % i === 0) {
        cnt += 1;
      }
    }
    if (cnt === 0 && changedNum > 1) answer.push(changedNum);
  }
  return answer;
}

const arr = [32, 55, 62, 20, 250, 370, 200, 30, 100];
console.log(solution(arr));
 
처음에는
흠 함수를 두개쓸까... 하다가
그냥 하나로 해보장 해서 짠 코드다.
for문안에서 for문을 돌렸다.
 
하나씩 보면
function solution(arr) {
  const answer = [];

  for (const num of arr) {
    let cnt = 0;
    const changedNum = Number(num.toString().split('').reverse().join(''));

answe에 빈 배열 할당해놓고

첫 for문을 돌린다.

cnt는 나중에 쓸거다.

changedNum에다가 

toString,split으로 하나씩 끝어진 배열 만들고

reverse로 뒤집어서 join으로 하나로 합친 문자열로 만들고

Number로 숫자로 만들어준다.

 

이거 할때가 제일 재밌다..

 

function solution(arr) {
  const answer = [];

  for (const num of arr) {
    let cnt = 0;
    const changedNum = Number(num.toString().split('').reverse().join(''));

    for (let i = 2; i < Math.ceil(Math.sqrt(changedNum)); i++) {
      if (changedNum % i === 0) {
        cnt += 1;
      }
    }
    if (cnt === 0 && changedNum > 1) answer.push(changedNum);
  }
  return answer;
}

const arr = [32, 55, 62, 20, 250, 370, 200, 30, 100];
console.log(solution(arr));

두번째 for문은 changedNum이 소수인지 아닌지 판별한다.

어... 저 중간에 조금 곤란해 보이는게 있는데

저건 이걸 참고하면 된다.

https://kong-dev.tistory.com/76

 

소수판별하기

이거 소수판별이라고면 치면 나오는 내용이긴한데 한번 정리해두면 안까먹을거 같아서 정리해보려한다. 어떤 숫자가 소수인지 아닌지 판별을 할때는 2부터 그 숫자-1까지 하나하나 나누면서 조

kong-dev.tistory.com

 

그래서 소수가 아니라면 카운트에 숫자가 올라간다.

 

if 문에서 카운트가 0이고 changedNum이 1보다 크면 answer에다가 changedNum을 push해준다.

 

이번에느 센세의 코드를 보자

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 = Number(x.toString().split('').reverse().join(''));
    if (isPrime(res)) answer.push(res);
  }
  return answer;
}

let arr = [32, 55, 62, 20, 250, 370, 200, 30, 100];
console.log(solution(arr));

음 함수 두개 돌리셨네^^

나도 그냥 두개돌릴걸

뭔가 두개 돌리면 안될거 같아서 하나로 돌린건데

두개돌려도 되나보당 ㅎ

 

첫번째 함수는 소수를 판별하는 함수이다.

1이 들어오면 바로 false를 얼리리턴하고

소수면 true를 아니면 false를 리턴한다.

 

두번째 함수는 숫자를 뒤집은 숫자로 만들고

if문을 통해 뒤집은 숫자가 소수이면 answer에 push한다.

 

으음.. 함수 두개 쓰면 안될줄 알고 쫄았는데

앞으로 쫄지말자.

우리집 시니어가 말해준건데,

명확한 건 함수로 따로 빼줘도 괜찮다고 한다.

음.. 명확한거..가 뭔지가 명확하지 않은데 어카누..?

728x90
728x90

'문제풀이 > 인프런 알고리즘 문제풀이' 카테고리의 다른 글

4-5 k번째 큰수  (0) 2021.12.20
4-4 졸업선물  (0) 2021.12.20
4-3 멘토링  (0) 2021.12.20
4-1 자릿수의 합  (0) 2021.12.14
격자판 최대합  (0) 2021.12.10

댓글