2023-12-22[TIL]

jenna·2023년 12월 22일
0

TIL/WIL

목록 보기
43/59

ALGORITHM

문제)
// 문자열 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"
profile
https://github.com/jennaaaaaaaaa

0개의 댓글