문제)
// 문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다.
// 현지는 s에 나타나는 숫자 중 소수의 최대값과
// 소수가 아닌 수의 최소값을 찾아
// 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하려고 합니다.
// 예를들어 s가 "2 3 4 5"라면 "4 5"를 리턴하고, "15 3 10 9 7 8"라면 "8 7"을 리턴하면 됩니다.
// - s에는 둘 이상의 정수가 공백으로 구분되어 있습니다.
// - 문자열에는 소수가 한개 이상 섞여 있습니다.
// - 문자열에는 소수가 아닌 수가 한개 이상 섞여 있습니다.
// - 음수는 없습니다.
혼자 생각한 풀이과정
// 소수란: 1과 자기 자신만을 약수로 가지는 수
// 소수임을 증명하는 계산법:
// i를 아직 쓸수 없기에 nums의 길이만큼 돌리고 그 안에서 빈 배열을 선언한 배열의 길이만큼 반복 해주면서
// 중접으로 다음 for 반복문을 아래처럼 이용한다(i=> j)
//for문으로 i= 2부터 (1과 자기 자신만을 이라고 했으니 1은 당연히 나눠지는, 계산을 조금이라도 덜 하기 위해?..)
// i가 해당숫자보다 작을 때까지 반복 하면서 해당숫자 나누기 i를 했을 때 나머지가 0이 되는 수가 있다면
// 그 해당 숫자는 소수가 아니다
// 소수인 수 배열과 소수가 아닌 수의 빈 배열을 선언해두고 차곡차곡 넣는다
// 소수인 수 들 중 최대값과 소수가 아닌 수의 최소값을 반환
function solution(s){
let nums = s.split(' ').map(Number)
let isPrime = []
let notPrime = []
for( let i = 0; i < nums.length; i++){
for (let j = 2; j < nums[i]/2; j++){
if(nums[i]%j === 0){
notPrime.push(nums[i])
} else {
isPrime.push(nums[i])
}
}
}
console.log("isPrime", isPrime)
console.log("notPrime", notPrime)
let answer = 0
return answer
}
let s="97 75 88 99 95 92 73";
console.log(solution(s))
// let s="97 75 88 99 95 92 73"; //"75 97"
// let s="15 3 10 9 7 8"; "8 7"
// let s="2 3 4 5"; "4 5"
생각 못 한 부분
// for 안에서 push(nums[i])를 해주면 반복하고 있는 중이라 돌아가는 만큼 push에 찍히게 됨
// if 안에서 소수가 아닌지만 체크해주고 멈춰서 if문을 빠져나오게 한 뒤 맨안쪽 for문도 빠져나와
// 첫번째 for문 안에 있는 if문으로 들어간다 isPrimeCheck가 false로 저장되면 notPrime으로 들어갈것//
// isPrimeCheck에서 기본초기값을 true로 해두고 if에 조건이 맞는 nums[i]에 대해 isPrimeCheck = false면
// // break로 if문과 두번째 for문을 빠져나오게 된다 첫번째 for문에서 isPrimeCheck가 true가 아니라서 notPrime으로 push된다
function solution(s){
let nums = s.split(' ').map(Number)
let isPrime = []
let notPrime = []
for( let i = 0; i < nums.length; i++){
let isPrimeCheck = true;
for (let j = 2; j <= nums[i]/2; j++){
if(nums[i]%j === 0){
isPrimeCheck = false
break;
}
}
// 1은 소수가 아니라서?
if(isPrimeCheck && nums[i] > 1){
isPrime.push(nums[i])
} else {
notPrime.push(nums[i])
}
}
// console.log("isPrime", isPrime)
// console.log("notPrime", notPrime)
let max = Math.max(...isPrime)
let min = Math.min(...notPrime)
// console.log("max", max);
// console.log("min", min);
let answer = `${min} ${max}`
return answer
}
let s="2 3 4 5";
console.log(solution(s))
// let s="97 75 88 99 95 92 73"; //"75 97"
// let s="15 3 10 9 7 8"; "8 7"
// let s="2 3 4 5"; "4 5"