N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 소수를 출력하 는 프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출 력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다.
[입력설명]
첫 줄에 자연수의 개수 N(3<=N<=100)이 주어지고, 그 다음 줄에 N개의 자연수가 주어진다. 각 자연수의 크기는 100,000를 넘지 않는다.
[출력설명]
첫 줄에 뒤집은 소수를 출력합니다. 출력순서는 입력된 순서대로 출력합니다.
9
32 55 62 20 250 370 200 30 100
23 2 73 2 3
<script>
while(x){
let t=x%10; //1의 자리
res=res*10+t;
x=parseInt(x/10); //Math.floor도 됨. 여기서 parseInt는 몫만 나타내기 위해 사용(몫만 나타내려면 Math.floor, parseInt 사용가능)
}
</script>
Math.sqrt(num)
: num의 제곱근 (16-4)parseInt
, Math.floor
은 소수점을 삭제한다. (몫만 나타내야 할 때, 반드시 사용해줄 것! 앞장 참고)Number(x.toString().split('').reverse().join(''))
: x를 문자열로 바꾸고, 문자열을 쪼개서 배열로 만든다. 그 이후 배열을 뒤집고, join한다. 문자열을 Number화한다. 코드1은 reverse 내장함수를 사용하지 않은 방법이다.
(1) for x of arr
(2) x를 뒤집는다.
(3) 뒤집은 변수 res가 소수가 되는지 판별한다(소수 판별 함수를 따로 만든다.)
<!--방법1-->
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
//소수인지 확인하는 함수(소수: 1과 자기자신만 약수인 수)
function isPrime(num){
if(num===1) return false; //소수에서 1 제외
//parseInt를 사용해서 몫만 나타냄(나머지 삭제)
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; //1의 자리
res=res*10+t;
x=parseInt(x/10); //Math.floor도 됨. 여기서 parseInt는 몫만 나타내기 위해 사용(몫만 나타내려면 Math.floor, parseInt 사용가능)
}
if(isPrime(res)) answer.push(res);
}
return answer;
}
let arr=[32, 55, 62, 20, 250, 370, 200, 30, 100];
console.log(solution(arr));
</script>
</body>
</html>
코드2는 reverse 메소드를 활용하여 뒤집는 방법이다.
(1) let x of arr
(2) Number(x.toString().split('').reverse().join(''));을 통해 x를 뒤집은 값을 res에 넣는다.
(3) res가 소수인지 판별한다(별도 함수)
<!-- 방법2) reverse 메소드 사용 -->
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
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));
</script>
</body>
</html>
9/11
1. i<=parseInt(Math.sqrt(num)) (
i<=parseInt(num/2)
) 사용해서 코드 효율성 높이자 (굳이 탐색하지 않아도 되는곳까지 탐색하지 말것)2. 내장함수 reverse 사용하지 않고 숫자 뒤집는 방법 기억