-
[04.완전탐색] 뒤집은 소수알고리즘 2022. 4. 3. 22:11
문제
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
결과
O
내가 푼 방식
const solution = (array) => { let answer= []; const isPrime = (num) => { for(let i=2; i < num; i++) { if(num % i === 0) return false } return num > 1 } for(let i=0; i < array.length; i++) { let str = array[i].toString().split('').reverse().join(''); if(isPrime(Number(str))) { answer.push(Number(str)) } } return answer; }
접근과정
- 소수를 구하는 함수를 생각할 수 있는 것이 관건인 문제이다.
- 소수는 1과 자기 자신을 제외한 모든 수로 나뉘어 지지 않는 수로 해당 값보다 작은 수들을 모두 나눠 나머지가 0인가 아닌가 여부로
소수를 판단한다. - 매개변수로 받는 array를 반복문을 돌려 해당 인덱스의 값을 거꾸로 돌리는 작업을 위해 정수로 만들어 배열을 만들고 reverse 메소드로 돌리고 다시 string으로 합치는 작업을 해준다 (32 - >23)
- 3번의 과정을 거친 string을 Number로 만들어주고 아까 만든 소수 구분 함수에 넣어 여부를 판단한다.
- 맞다면 return할 배열에 push하여 최종 그 배열을 return한다.
모범답안
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; }
리뷰
'알고리즘' 카테고리의 다른 글
[04.완전탐색] k번째 큰 수 (0) 2022.04.17 [04.완전탐색] 멘토링 (0) 2022.04.10 [04.완전탐색] 자리수의 합 (0) 2022.04.03 [03.문자열탐색] 문자열 압축 (0) 2022.04.03 [03.문자열탐색] 가장 짧은 문자거리 (0) 2022.03.27