article thumbnail image
Published 2022. 6. 13. 16:09
뒤집은 소수
N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 소수를 출력하
는 프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출
력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다.
▣ 입력설명
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다.
각 자연수의 크기는 100,000를 넘지 않는다.
▣ 출력설명
첫 줄에 뒤집은 소수를 출력합니다. 출력순서는 입력된 순서대로 출력합니다.
▣ 입력예제 1
9
32 55 62 20 250 370 200 30 100
▣ 출력예제 1
23 2 73 2 3
 

📌작성코드

<html>

<head>
  <meta charset="UTF-8">
  <title>출력결과</title>
</head>

<body>
  <script>
    function isPrime(num) { //소수가 아닌 조건을 조건문으로 적어줌
      if (num === 1){
      return false  //1은 소수가 아니니까
      }
      for (let i = 2; i < num; i++) { //1은 걸러서 2부터 length는 문자열과 배열탐색만 사용 //i < num는 다도는것 
        if (num % i === 0) { //num의 인덱스의 나머지가 0이면? 1,2,4 8,16 16을 기준으로 중간값 2,4,8이 존재하니까 
          return false;
        }
      }
      return true //위의 조건문을 둘다 걸러줘야해서 return
    }

    function solution(arr) {
      let answer = []; //배열로 들어와야함
      let reverse;
      for (let i = 0; i < arr.length; i++) {
        reverse = parseInt(arr[i].toString().split('').reverse().join('')); //스플릿, 리버스, 조인 =>스트링메소드라서 스트링으로 바꿔줘야함
        if (isPrime(reverse)) {
          answer.push(reverse)
        }
      }
      return answer;
    }

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

</html>

 

우선 isPrime 이라는 함수를 만들어 소수인지 아닌지를 판별해준다.

기본적으로 1은 소수가 아니니까 조건문을 사용해서 num === 1 일때는 걸러주고 return false를 반환한다.

 

더 알기쉽게 숫자를 넣어보자.

주어진 숫자가 16이라고 했을때,

1, 2, 4, 8, 16이라는 숫자가 주어지고

num의 인덱스의 나머지가 0이면? 1,2,4 8,16 16을 기준으로 중간값 2,4,8이 존재하니까 false를 반환!

우리는 최종적으로 true(소수이니까)를 반환해야하니까 조건문과 for문의 바깥에 return true를 넣어준다.

 

그 다음 새로운 함수를 만들어주고 arr를 인자로 받는다.

뒤집은 숫자를 넣어줄 reverse 변수를 만들고,

숫자를 뒤집어줘야 하기때문에 reverse를 사용한다.

reverse를 사용하려면 split로 쪼개고 reverse, join을 사용해줘야한다.

( split, reverse, join은 string 메소드라서 toString으로 바꿔줘야 한다.)

조건문을 사용하여 위에서만든 isPrime 함수(true반환하는거) 를 넣어주고

여러가지 값이 나와야하니까 배열로 push해준다.

 

전체적인 로직을 살펴보면

솔루션 함수가 실행하면 for문을 돌고, 조건문을 실행한다.

조건문안에 소수이지 아닌지 판별을 위해 

위에서 만든 isPrime 함수를 넣고 매개변수로 reverse를 넣어준다.

만약 숫자 32면 reverse를 거쳐서 23이 되고,

isPrime함수에 num이 23이 들어가게 된다.

23이 소수인지 아닌지를 판별해 true, false로 반환한다.

true면 answer에 값을 저장하고, false면 패쓰한다.

결과값이 잘 출력됨

'알고리즘' 카테고리의 다른 글

[알고리즘 문제] 4-4번  (0) 2022.06.16
[알고리즘 문제] 4-3번  (1) 2022.06.13
[알고리즘 문제] 4-1번  (0) 2022.06.11
[알고리즘 문제] 3-5번  (0) 2022.06.10
[알고리즘 문제] 3-4번  (0) 2022.06.10
복사했습니다!